千家信息网

docker run启动的容器挂掉了数据怎么办

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,情景描述在某个系统中,功能性的服务使用 docker stack deploy xxx 启动,某个国产数据库的服务单独使用 docker run xxx 启动,数据库服务没有将存储的位置挂载出来;结果
千家信息网最后更新 2026年11月01日docker run启动的容器挂掉了数据怎么办

情景描述

在某个系统中,功能性的服务使用 docker stack deploy xxx 启动,某个国产数据库的服务单独使用 docker run xxx 启动,数据库服务没有将存储的位置挂载出来;

结果客户重启了服务器…再登录到服务器重启服务的时候,发现了一个问题,之前数据库里的数据可能会消失(如果再使用 docker run 启动的话)。

解决办法

尝试1

起初想的是数据肯定丢了,那就只能重新折腾一次数据了,但工作量太大了…

不过也没办法,下次再启动,把存储挂载到硬盘就好了,Orz

不过和同事交流了之后,发现了一个更为简单(但也不是永久的办法),见尝试2

尝试2

同事提到,可以使用 docker start container_name 再次将容器启动,这样的话数据还在。后面尝试了一下,果然数据还在……虽然也只是个临时的解决办法

后面想了一下,docker启动的镜像,如果不将数据映射出来的话,会存储在默认的volume;即使用docker restart xxx重启容器,那变动的数据也还是在的;也就是说在这个地方,服务器重启了,容器挂掉了(使用docker ps查看,其容器状态是Exited),但其实之前的数据还会在默认的volume下,只有删除掉容器的时候,变动的数据才会丢失。

验证测试

随便打包一个镜像,启动容器,创建一个文件,再停止,再启动,查看文件是否存在

# 启动容器➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1d6278f537113122d4ccbe00950790750215c5a09002bcbd1ef6f9e660fc9eaac➜ docker_start_test docker ps -aCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS           PORTS        NAMESd6278f537113    4cbf48630b46     "ping 127.0.0.1"     3 seconds ago    Up 2 seconds                  docker_run_test# 进容器增加文件➜ docker_start_test docker exec -it docker_run_test /bin/shsh-4.2# pwd/sh-4.2# touch testsh-4.2# exitexit# 重启容器➜ docker_start_test docker stop docker_run_testdocker_run_test➜ docker_start_test docker ps -a | grep docker_run_testd6278f537113    4cbf48630b46                             "ping 127.0.0.1"     About a minute ago  Exited (137) 12 seconds ago            docker_run_test# 进去查看文件是否存在➜ docker_start_test docker start docker_run_testdocker_run_test➜ docker_start_test docker exec -ti docker_run_test /bin/shsh-4.2# lsanaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test tmp usr var

可以看到,文件 test 依然存在;此时如果停掉容器,使用docker rm删掉容器,再重新启动一个同名容器,可以看到,容器内不再有test文件了

# stop / rm掉容器➜ docker_start_test docker stop docker_run_testdocker_run_test➜ docker_start_test docker ps -a | grep docker_rund6278f537113    4cbf48630b46                             "ping 127.0.0.1"     7 minutes ago    Exited (137) 13 seconds ago            docker_run_test➜ docker_start_test docker rm d6278f537113d6278f537113# 启动新的同名容器➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.199a6f5df0a86e4c07abf184e322a23e4fbec89ff354691459cdac8fcd8687ba3# 进入容器验证➜ docker_start_test docker exec -ti docker_run_test /bin/shsh-4.2# lsanaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr varsh-4.2# ls testls: cannot access test: No such file or directory

docker run的说明

从官网看到,start命令的作用是:

Start one or more stopped containers

emmm,挺直白,没什么可说的

PS

其实最好的办法,就是将容器的存储目录挂载出来…另外,一般来讲似乎数据库服务不应该使用容器启动

总结

以上所述是小编给大家介绍的docker run启动的容器挂掉了数据怎么办,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

容器 数据 服务 文件 办法 数据库 存储 尝试 服务器 同事 时候 镜像 变动 帮助 验证 怎么办 直白 一般来讲 没什么 这样的话 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技活动banner 互联网科技行业发展 河南真二互联网科技有限公司 盈实互联网科技 金诺互联网科技 没上市的科技互联网公司 互联网金融与金融科技 有马互联网科技 礼当家互联网科技 互联网科技logo设计 互联网科技有限公司 翻译 宁夏科技产业互联网案例 互联网和黑科技的看法 湖南一路畅行互联网科技 世界互联网领先科技成果获奖 2021互联网科技公司排名 互联网科技数字货币 易租星互联网科技有限公司 互联网时代高科技布局 现代科技的标志之一的互联网 狮子座互联网科技有限公司 广州紫鲸互联网科技 衡水科技产业互联网平台 汉立互联网科技有限公司联系电话 辽宁互联网新科技 注册互联网科技公司经营范围大全 互联网营销推广黑科技 半导体行业属于互联网高科技类吗 山东大美朱楼互联网科技有限公司 福建互联网展示科技馆设计
0