服务器重新启动后docker容器内的mysql无法启动的原因及解决方法

今天手贱地把自己的服务器重启了一下,然后照着流程,启动docker服务,然后重启mysql容器。
但是在我重启容器了之后却发现,使用docker ps命令后,并没有我刚刚重启的Mysql容器。
使用docker ps -a命令查看,可以看到Mysql容器几秒前退出了。也就是说,这个容器启动失败了。
然后我就使用docker logs [container ID]命令查看这个容器的运行日志,发现:提示了这么一条错误:

Access denied for user 'root'@'localhost' (using password: YES)

也就是说,这个docker容器的数据库默认密码错了。
然后我突然想起来,在我创建这个数据库docker容器的时候,确实有把数据库localhost的root密码修改过,但是同时没有修改这个容器的默认配置。
这就是为什么docker restart [container ID]命令无法重新启动mysql容器的原因了。(当然还有其他各种的原因,但大多都是配置方面的错误)

解决方法:

cd 到 /var/lib/docker/containers/目录下,这个目录就是docker容器的目录。
对于每一个容器,都有一个唯一的容器ID,我的是c9e55df1b121,然后我就可以在containers目录下找到以这个ID开头的文件夹:c9e55df1b121377fea6fc1b1cd6e79443d1b97aab50dc013dfa27b1002e76e14
进入这个目录,就可以看到有一个config.v2.json文件,这个文件就是该容器的配置文件。
打开这个文件就会看到以json形式存储的配置信息,然后在其中找到:MYSQL_ROOT_PASSWORD,这个密码应该就是老密码了。将这个老密码修改为正确的密码,保存即可。
注意:保存时,一定要确保docker没有在运行,即使用systemctl stop docker命令将docker关闭,否则保存后,docker仍然会依照老密码启动容器,容器仍然不能启动。

### 如何在阿里云服务器 Docker 容器部署和管理 MySQL #### 部署前准备 确保 Docker 已经成功安装并正常运行于阿里云服务器之上。可以通过 `systemctl status docker` 命令来确认 Docker 的状态[^1]。 #### 搜索与拉取 MySQL 镜像 利用 `docker search mysql` 可以查找官方提供的 MySQL 镜像版本,之后使用 `docker pull mysql:<tag>` 下载指定标签的镜像到本地环境之。 #### 创建自定义网络 (可选) 为了更好地管理和隔离不同应用之间的通信,建议先创建一个独立的 Docker 网络供后续容器加入: ```bash docker network create my_custom_network ``` #### 启动 MySQL 容器实例 下面是一条完整的命令用于启动带有持久化存储卷映射以及设置根密码参数化的 MySQL 实例: ```bash docker run --name=mysql_instance \ --network=my_custom_network \ -v /path/to/local/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=YourStrongPasswordHere \ -p host_port:container_mysql_default_port \ -d mysql:version_tag ``` 这里需要注意的是 `-v` 参数指定了数据目录挂载路径;而 `-e` 则用来传递环境变量给新创建的服务进程;最后通过 `-p` 将主机端口绑定至容器内部默认监听地址[^3]。 #### 设置远程访问权限 如果希望允许外部 IP 地址连接此数据库,则需进一步配置安全策略并向 MySQL 添加具有相应权限的新账户。具体做法是在登录后的 SQL 控制台里执行一系列授权语句: ```sql CREATE USER 'remote_user'@'%' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` #### 日常维护操作 对于已经处于活动状态下的 MySQL 容器而言,可以借助如下几项常用指令来进行基本的状态监控及故障排查工作: - **查看当前正在运行的所有容器**:`docker ps` - **进入目标容器内交互式 shell 终端**: `docker exec -it container_name_or_id bash/sh` - **停止某个特定 ID 或名称对应的容器**: `docker stop container_name_or_id` - **重新激活已暂停的任务**: `sudo docker start container_name_or_id`[^2]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值