数据分析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 运行新容器,所有的数据库数据都会原封不动地回来。
相关推荐
爱小黄3 小时前
使用docker搭建集群-使用 Docker 搭建 KingbaseES 集群
运维·docker·容器
ttwuai4 小时前
AI 生成后台改数据后,操作日志别只记按钮:Go + MySQL 怎么验
数据库·人工智能·mysql·golang
余—笙4 小时前
Docker安装rabbitmq并安装延迟队列插件
docker·容器·rabbitmq
韩楚风5 小时前
【参天引擎】一次宕机后的数据恢复,让我把 Cantian 持久化与恢复的六大机制全搞明白了
服务器·网络·数据库·分布式·mysql·架构·cantian
Mico186 小时前
MySQL 8.0.35 mydumper/myloader 备份恢复工具使用
mysql
心念枕惊6 小时前
Docker--Docker Swarm集群
运维·docker·容器
敖行客 Allthinker6 小时前
docker容器安装Python反推镜像步骤(适用于临时调试用)
python·docker·容器
tonydf7 小时前
传统老手艺之容器编排
后端·容器·aiops
张忠琳8 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 配置API模块深度分析之二
云原生·容器·架构·kubernetes·nvidia