数据分析agent(十三_3):docker mysql容器镜像服务的异常错误

0,检查容器是否已停止

html 复制代码
docker ps 默认只显示正在运行的容器。你可以加上 -a 参数,
查看所有容器(包括已停止的):

docker ps -a

在输出的列表中仔细查找是否有 MySQL 相关的容器。如果有,
但状态是 Exited(已停止),你可以使用 docker start 容器名或ID 来启动它。

一,启动mysql 镜像 服务

复制代码
docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
python 复制代码
C:\Users\13032>docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
docker: Error response from daemon: Conflict. The container name "/my-mysql" is already in use by container "829bdb615179de466752e93bfe0cdef75f658c612e7740161c8e5af33ae8cd07". You have to remove (or rename) that container to be able to reuse that name.

Run 'docker run --help' for more information

方法一:删除旧容器并重新创建(推荐)

复制代码
如果你不需要保留之前那个 my-mysql 容器里的数据,可以直接将其强制删除,然后再运行你的命令:
强制删除同名容器
复制代码
docker rm -f my-mysql
重新运行你的启动命令
复制代码
docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41

方法二:启动已存在的同名容器

复制代码
如果这个容器是你之前创建的,且你希望继续使用它(保留里面的数据),你不需要重新 run,直接启动它即可:


docker start my-mysql

方法三:为新容器指定一个不同的名称

复制代码
如果你希望保留现有的 my-mysql 容器,同时又想启动一个新的 MySQL 容器,可以为新容器起一个不冲突的名字:
 


docker run -d --name my-mysql-2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
💡 排查建议:
如果你想先看看这个冲突的容器到底是什么状态,可以运行以下命令查看:
 


docker ps -a --filter "name=my-mysql"
如果状态显示为 Exited,说明它已经停止但没被删除;如果显示为 Up,说明它正在运行中。
python 复制代码
:\Users\13032>docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
docker: Error response from daemon: Conflict. The container name "/my-mysql" is already in use by container "829bdb615179de466752e93bfe0cdef75f658c612e7740161c8e5af33ae8cd07". You have to remove (or rename) that container to be able to reuse that name.

Run 'docker run --help' for more information

C:\Users\13032>docker rm -f my-mysql
my-mysql

C:\Users\13032>docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
0b5e8081298ad13fe914444a09d7173b88f906b4cd408acd8eb41257b8b140e4

C:\Users\13032>

二: 问题:启动后丢失了之前 的数据库 数据 ,该如何让之前的容器 重新启动

第一步:确认旧容器是否还存在

复制代码
如果你之前只是执行了 docker stop 或 docker rm -f 后重新 run,我们需要先确认旧容器是否还在。
运行以下命令查看所有容器(包括已停止的):

docker ps -a --filter "name=my-mysql"
如果能看到之前的容器(状态为 Exited):说明数据还在,直接跳到第二步。
如果看不到之前的容器(或者你确定已经执行了 docker rm -f 且没有挂载目录):说明容器的可写层已被销毁。请直接跳到第三步(尝试找回)。

第二步:直接启动旧容器(保留原有数据)

复制代码
如果旧容器还在,你不需要重新 docker run,直接使用 start 命令唤醒它即可:
 


docker start my-mysql
启动后,你可以进入容器验证数据是否完好:

docker exec -it my-mysql mysql -u root -phappy123 -e "SHOW DATABASES;"

第三步:如果旧容器已被删除,如何找回数据?

复制代码
如果你之前执行了 docker rm -f 并且没有挂载外部目录,数据理论上会随容器删除而丢失。但你可以尝试以下"急救"方案:
方法 1:检查是否有残留的匿名卷(Anonymous Volumes)
复制代码
docker run -d --name my-mysql-recovery -v xxxxx_var_lib_mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41
方法 2:检查是否有备份文件
复制代码
如果你之前使用过 mysqldump 导出过 .sql 文件,或者在宿主机上有备份目录,可以启动一个全新的容器并导入数据:

启动新容器

复制代码
docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 mysql:8.0.41

将备份的 SQL 文件导入到新容器中

复制代码
cat /path/to/your/backup.sql | docker exec -i my-mysql mysql -u root -phappy123
🛑 强烈建议:彻底解决数据丢失问题
为了避免以后再发生类似的心惊肉跳,生产或开发环境的数据库容器必须挂载数据卷。
下次创建 MySQL 时,请使用 -v 参数将数据持久化到宿主机:
 


docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=happy123 -v mysql-data:/var/lib/mysql mysql:8.0.41

这样配置后,即使你执行 docker rm -f my-mysql 删除了容器,再次用相同的 -v mysql-data:/var/lib/mysql 运行新容器,所有的数据库数据都会原封不动地回来。
相关推荐
用户938515635072 小时前
Docker + Nginx + Node.js:从“我的电脑能跑,你的电脑跑不了”到一键部署
后端·nginx·docker
01_ice3 小时前
MySQL库和表的操作
数据库·mysql
这个DBA有点耶5 小时前
从库延迟的“二次放大”效应:一次大事务,拖垮整个读写分离
数据库·mysql·架构
一个有温度的技术博主5 小时前
MySQL 三大日志协同机制:redo log、undo log 与 binlog 的联合运作
数据库·mysql·oracle
SCandL1526 小时前
Docker的实战应用
java·docker·容器
张洛闻Eren8 小时前
MySQL 管理复制拓扑【MySQL第四课】
linux·运维·数据库·mysql
小王C语言9 小时前
MySQL 内置函数:日期函数、字符串函数、数学函数、其他函数
数据库·mysql
qq_21539789710 小时前
docker镜像打包
运维·docker·容器
渣渣盟10 小时前
误删数据之后:MySQL、PostgreSQL、Oracle三库紧急恢复完全实操手册
mysql·postgresql·oracle
juesdo11 小时前
vulnos OS-00118靶场通关
linux·web安全·网络安全·docker