详解Docker退出容器不关闭容器的方法
进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢?
如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记!
以下示例为退出容器但不关闭容器
[root@localhost~]#dockerattachc600c4519fc8 [root@c600c4519fc8/]#exit exit [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c600c4519fc8centos"/bin/bash"3hoursagoExited(0)1secondagopensive_jackson 5a7a0d694651busybox"sh"20hoursagoExited(0)20hoursagohungry_vaughan 4b0296d18849hello-world"/hello"46hoursagoExited(0)46hoursagohopeful_yonath [root@localhost~]#dockerstartpensive_jackson pensive_jackson [root@localhost~]#dockerattachc600c4519fc8 Ctrl+P+Q [root@c600c4519fc8/]#readescapesequence [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c600c4519fc8centos"/bin/bash"3hoursagoUp22secondspensive_jackson 5a7a0d694651busybox"sh"20hoursagoExited(0)20hoursagohungry_vaughan 4b0296d18849hello-world"/hello"46hoursagoExited(0)46hoursagohopeful_yonath
事实上我们可以在启动容器的时候就进行配置,加入-d参数来启动容器,当然,这条命令仅限于启动全新的容器,启动关闭的容器是不可以的。
Tips1
dockerrun-d:后台运行容器,并返回容器ID
以下示例为使用docker-d启动容器并退出
[root@localhost~]#dockerrun-i-t-dcentos/bin/bash 8521b11d5d99535d4cb0080adc5a58a4dd018ecd0751d9945f7da7ab01bec330 [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8521b11d5d99centos"/bin/bash"4secondsagoUp4secondseager_goldwasser c600c4519fc8centos"/bin/bash"3hoursagoExited(0)28secondsagopensive_jackson 5a7a0d694651busybox"sh"20hoursagoExited(0)20hoursagohungry_vaughan 4b0296d18849hello-world"/hello"46hoursagoExited(0)46hoursagohopeful_yonath [root@localhost~]#dockerattach8 [root@8521b11d5d99/]#uname-r 3.10.0-514.el7.x86_64 [root@8521b11d5d99/]#exit exit [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8521b11d5d99centos"/bin/bash"2minutesagoExited(0)2secondsagoeager_goldwasser c600c4519fc8centos"/bin/bash"3hoursagoExited(0)2minutesagopensive_jackson 5a7a0d694651busybox"sh"20hoursagoExited(0)20hoursagohungry_vaughan 4b0296d18849hello-world"/hello"46hoursagoExited(0)46hoursagohopeful_yonath
在这里你可能会发现,使用了-d的命令退出后容器依然还是死了,动手型的朋友可能会发现只是用dockerrun-d去启动容器也一样是死的
这里其实需要了解的是容器的运行机制,Docker容器在后台运行,必须要有一个前台进程,这里我们让容器有前台程序运行,就可以实现容器的-d启动后存活
[root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c600c4519fc8centos"/bin/bash"3hoursagoExited(0)4minutesagopensive_jackson 5a7a0d694651busybox"sh"21hoursagoExited(0)21hoursagohungry_vaughan 4b0296d18849hello-world"/hello"47hoursagoExited(0)47hoursagohopeful_yonath [root@localhost~]#dockerrun-dcentos/bin/bash-c"nohupping-i1000www.baidu.com" 8aa19c9604382bc019797ccda831ae1bcebd81d86380b6040d636e03000b440a [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8aa19c960438centos"/bin/bash-c'nohup…"2secondsagoUp2secondsadoring_wing c600c4519fc8centos"/bin/bash"3hoursagoExited(0)5minutesagopensive_jackson 5a7a0d694651busybox"sh"21hoursagoExited(0)21hoursagohungry_vaughan 4b0296d18849hello-world"/hello"47hoursagoExited(0)47hoursagohopeful_yonath
我这里使用nohup在后台运行一个每1000秒ping一次百度的进程,另外你也可以使用"whiletrue;doechohelloworld;sleep1;done",无限输出helloworld。
另外即便是有进程在后台运行,你进入了容器,输入exit退出,依然会终止容器的运行,请谨记。
Ctrl+P+Q依然是我认为的最佳用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。