docker启动MySQL容器失败原因分析以及排查记录

 更新时间:2025年02月10日 16:18:18   作者:暴躁的鱼  
在使用Docker启动MySQL容器时,遇到了配置文件路径错误的问题,通过查看容器日志发现,容器读取的配置文件路径与指定的不一致,解决方法是修改启动命令中的配置文件路径,将其指向正确的目录,最终,容器成功启动并进入Up状态

docker启动MySQL容器失败原因及排查记录

背景

最近在尝试容器搭建MySQL集群时碰到一个错误,启动MySQL时碰到一个,经过排查解决,在此做一个记录

问题过程

启动MySQL容器

$ sudo docker run -d -p 3306:3306 \
> --name mysql \
> -v /opt/mysql/log:/var/log/mysql \
> -v /opt/mysql/data:/var/lib/mysql \
> -v /opt/mysql/conf:/etc/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> mysql
3cf4012772cc2e22732aa6d5eb716d7b290a95da25b750d4a1189e77ab985f33
# 运行后,查看运行中的容器发现没有刚启动MySQL
[bing@centosone nginx]$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED        STATUS        PORTS                                                                        NAMES
5c7b103435d1   nginx:latest   "/docker-entrypoint.…"   8 hours ago    Up 8 hours    0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:85->80/tcp, [::]:85->80/tcp   my-nginx
28cda42916c3   nginx:latest   "/docker-entrypoint.…"   15 hours ago   Up 15 hours   0.0.0.0:82->80/tcp, [::]:82->80/tcp                       
  • mysql/log:存储MySQL日志
  • mysql/data:是数据库文件(库表数据存放处)存放的地方。必须要挂载到容器外,否则容器重启一切数据消失。
  • mysql/conf:mysql配置,mysql启动时读取配置

查看所有容器docker ps -a

发现MySQL是已经exit了

$ sudo docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS                                                                        NAMES
4e163949caa2   mysql          "docker-entrypoint.s…"   20 minutes ago   Exited (1) 17 minutes ago                                                                                mysql

然后尝试删除容器重启还是一样

$ sudo docker rm 4e1
4e1
$ sudo docker run -p 3306:3306 
--name mysql 
-v /opt/mysql/log:/var/log/mysql 
-v /opt/mysql/data:/var/lib/mysql 
-v /opt/mysql/conf:/etc/mysql 
-e MYSQL_ROOT_PASSWORD=root 
-d mysql
b3153c7d9d33f28e9808fbd6f8feea44ac12e45f9aec637a789a29b9f7f5dcd2

# 仍然是exit状态
$ sudo docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                     PORTS                                                                        NAMES
b3153c7d9d33   mysql          "docker-entrypoint.s…"   3 seconds ago   Exited (1) 2 seconds ago                                                                                mysql

查看容器日志

$ sudo docker logs --tail 100 --follow --timestamps {容器名称}

问题原因

如上图,查看日志发现是没有配置文件目录,我们的命令指定的配置文件路径是/etc/mysql/,而容器读取的配置文件路径是/etc/mysql/conf.d/。

在这一行-v /opt/mysql/conf:/etc/mysql,我们将主机路径/opt/mysql/conf挂载到容器路径/etc/mysql下,实际上容器配置在/etc/mysql/conf.d/目录下。

修改启动命令

修改启动命令中的配置文件路径,再次重新启动成功,如下:

sudo docker run -p 3306:3306 --name mysql \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql
ef8d15ff3c2828b718357ad7d41117ca46c3fec7bb6b3a365c886926b275fbb8

# 启动成功
sudo docker ps 
[sudo] bing 的密码:
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                                                        NAMES
ef8d15ff3c28   mysql          "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp              

mysql容器终于是 Up 状态了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker中运行PostgreSQL容器的简单步骤

    docker中运行PostgreSQL容器的简单步骤

    这篇文章主要给大家介绍了关于docker中运行PostgreSQL容器的简单步骤,随着docker的广泛应用,为了提供便利的管理,PostgreSQL数据库也支持docker的安装方式,需要的朋友可以参考下
    2023-08-08
  • docker 报错 Exited (1) 4 minutes ago的原因分析

    docker 报错 Exited (1) 4 minutes ago的原因分析

    这篇文章主要介绍了docker 报错 Exited (1) 4 minutes ago的原因分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 部署OceanBase-ce全过程

    部署OceanBase-ce全过程

    这篇文章主要介绍了部署OceanBase-ce全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 数据卷(Data Volumes)及dockefile详解

    数据卷(Data Volumes)及dockefile详解

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作,今天给大家介绍下数据卷(Data Volumes)及dockefile的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • 使用Docker容器部署Vue程序

    使用Docker容器部署Vue程序

    这篇文章介绍了使用Docker容器部署Vue程序的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • 多个docker compose启动的容器之间通信实现过程

    多个docker compose启动的容器之间通信实现过程

    文章讨论了Docker Compose中多组容器编排的问题,指出默认情况下各组容器网络会隔离,为了解决跨组访问的问题,文章建议创建一个公共网络,并将各组容器组的默认网络配置改为该公共网络,同时启用外部连接,这样可以实现跨组访问,解决网络隔离的限制
    2025-09-09
  • Docker容器项目无法访问MySQL的问题排查与解决策略

    Docker容器项目无法访问MySQL的问题排查与解决策略

    本文分析了Docker容器连接MySQL时常见的问题,并提供了解决方案,主要问题包括网络隔离、服务启动顺序、权限配置等,解决方案包括使用自定义网络、连接宿主机MySQL、健康检查与启动等待、端口映射与防火墙配置、MySQL权限配置和Host网络模式等,需要的朋友可以参考下
    2026-04-04
  • docker容器状态转换管理命令实例详解

    docker容器状态转换管理命令实例详解

    Docker容器只是一个运行于宿主操作系统host OS上的应用进程,所以你需要一个镜像来运行它,Docker镜像以进程的方式运行时就叫做Docker容器,这篇文章主要给大家介绍了关于docker容器状态转换管理命令的相关资料,需要的朋友可以参考下
    2022-05-05
  • 关于ROS2安装与docker环境使用

    关于ROS2安装与docker环境使用

    大家好,本篇文章主要讲的是关于ROS2安装与docker环境使用,感兴趣的同学赶快来看看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 一次docker错误的耗时排查过程记录

    一次docker错误的耗时排查过程记录

    这篇文章主要给大家介绍了一次docker错误的耗时排查过程记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论