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

发布时间:2022-05-31 11:18:08 作者:zzz
来源:亿速云 阅读:425

这篇文章主要介绍了docker run启动的容器挂掉了数据怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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.1
d6278f537113122d4ccbe00950790750215c5a09002bcbd1ef6f9e660fc9eaac
➜ docker_start_test docker ps -a
container id    image        command         created       status           ports        names
d6278f537113    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/sh
sh-4.2# pwd
/
sh-4.2# touch test
sh-4.2# exit
exit
# 重启容器
➜ docker_start_test docker stop docker_run_test
docker_run_test
➜ docker_start_test docker ps -a | grep docker_run_test
d6278f537113    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_test
docker_run_test
➜ docker_start_test docker exec -ti docker_run_test /bin/sh
sh-4.2# ls
anaconda-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_test
docker_run_test
➜ docker_start_test docker ps -a | grep docker_run
d6278f537113    4cbf48630b46                             "ping 127.0.0.1"     7 minutes ago    exited (137) 13 seconds ago            docker_run_test
➜ docker_start_test docker rm d6278f537113
d6278f537113
# 启动新的同名容器
➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1
99a6f5df0a86e4c07abf184e322a23e4fbec89ff354691459cdac8fcd8687ba3
# 进入容器验证
➜ docker_start_test docker exec -ti docker_run_test /bin/sh
sh-4.2# ls
anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
sh-4.2# ls test
ls: cannot access test: no such file or directory

docker run的说明

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

start one or more stopped containers

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

ps

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

               

关于“docker run启动的容器挂掉了数据怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“docker run启动的容器挂掉了数据怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 「实战篇」开源项目docker化运维部署-redis高速缓存(六)
  2. Docker第五回(Docker存储卷)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker run

上一篇:如何使用docker部署Elasticsearch集群

下一篇:Docker修改DOCKER_OPTS参数不生效怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》