• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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启动的容器挂掉了数据怎么办,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    上一篇:Centos7.5配置IP地址的实现
    下一篇:Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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