数据分析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 运行新容器,所有的数据库数据都会原封不动地回来。
相关推荐
鹤落晴春10 小时前
【K8s】认识Kubernetes API:从CRD出发的一次梳理
云原生·容器·kubernetes
yanwumuxi12 小时前
Docker记录:误删宿主机挂载目录导致 PostgreSQL 数据丢失
docker·postgresql·容器
数据库小学妹12 小时前
MySQL长事务复盘:Sleep连接、MDL排队与undo滞留
运维·数据库·mysql
计算机毕设定制辅导-无忧学长12 小时前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
cui_hao_nan14 小时前
Docker 学习 5
docker·容器
棣廷14 小时前
初识MySQL——DQL数据查询语言详解
数据库·mysql
A黄俊辉A14 小时前
两分钟上手docker
运维·docker·容器
程序员老赵15 小时前
Docker 部署 go2rtc:轻松搭建摄像头多协议流媒体平台
前端·docker·直播
ttwuai15 小时前
Go 后台初始化 MySQL 脚本失败怎么办?先查 DDL 还是生成配置
开发语言·mysql·golang
努力努力再努力wz16 小时前
【Docker入门系列】:从架构演进到容器化:一文建立 Docker、虚拟化与 Namespace 的底层心智模型
运维·开发语言·数据结构·c++·docker·容器·架构