数据分析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 运行新容器,所有的数据库数据都会原封不动地回来。
相关推荐
JavaPub-rodert25 分钟前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
编程火箭车1 小时前
MySQL 拥抱 AI:向量、RAG、AutoML 全进了数据库
数据库·mysql·ai编程·向量数据库·rag·automl·mysql9
o_oer1 小时前
mysql type
mysql
花卷持续成长1 小时前
慢SQL的整体优化思路
后端·mysql
鱼很腾apoc2 小时前
【MySQL】第3期 索引、事务与视图系统详解
linux·mysql·事务·索引·dml·视图·macc
misty youth4 小时前
Navicat与PHPstudy小皮
mysql·adb·php·navicat
毕业设计7034 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
leaf9z4 小时前
阿里云rds查看所有库大小
mysql·阿里云
Yyyyyy~4 小时前
【Mysql】表的操作
数据库·mysql
Q26433650234 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计