來源:https://www.jianshu.com/p/b1ce248d2a42
器不關閉呢?
如果要正常退出不關閉容器,請按Ctrl+P+Q進行退出容器,這一點很重要,請牢記!
以下示例為退出容器但不關閉容器
[root@localhost ~]# docker attach c600c4519fc8 [root@c600c4519fc8 /]# exit exit [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c600c4519fc8 centos "/bin/bash" 3 hours ago Exited (0) 1 second ago pensive_jackson 5a7a0d694651 busybox "sh" 20 hours ago Exited (0) 20 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago hopeful_yonath [root@localhost ~]# docker start pensive_jackson pensive_jackson [root@localhost ~]# docker attach c600c4519fc8 Ctrl + P + Q [root@c600c4519fc8 /]# read escape sequence [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c600c4519fc8 centos "/bin/bash" 3 hours ago Up 22 seconds pensive_jackson 5a7a0d694651 busybox "sh" 20 hours ago Exited (0) 20 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago hopeful_yonath
事實上我們可以在啟動容器的時候就進行配置,加入-d參數來啟動容器,當然,這條命令僅限於啟動全新的容器,啟動關閉的容器是不可以的。
Tips 1
docker run -d: 后台運行容器,並返回容器ID
以下示例為使用docker -d啟動容器並退出
[root@localhost ~]# docker run -i -t -d centos /bin/bash 8521b11d5d99535d4cb0080adc5a58a4dd018ecd0751d9945f7da7ab01bec330 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8521b11d5d99 centos "/bin/bash" 4 seconds ago Up 4 seconds eager_goldwasser c600c4519fc8 centos "/bin/bash" 3 hours ago Exited (0) 28 seconds ago pensive_jackson 5a7a0d694651 busybox "sh" 20 hours ago Exited (0) 20 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago hopeful_yonath [root@localhost ~]# docker attach 8 [root@8521b11d5d99 /]# uname -r 3.10.0-514.el7.x86_64 [root@8521b11d5d99 /]# exit exit [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8521b11d5d99 centos "/bin/bash" 2 minutes ago Exited (0) 2 seconds ago eager_goldwasser c600c4519fc8 centos "/bin/bash" 3 hours ago Exited (0) 2 minutes ago pensive_jackson 5a7a0d694651 busybox "sh" 20 hours ago Exited (0) 20 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 46 hours ago Exited (0) 46 hours ago hopeful_yonath
在這里你可能會發現,使用了-d的命令退出后容器依然還是死了,動手型的朋友可能會發現只是用docker run -d去啟動容器也一樣是死的
這里其實需要了解的是容器的運行機制,Docker容器在后台運行,必須要有一個前台進程,這里我們讓容器有前台程序運行,就可以實現容器的-d 啟動后存活
[root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c600c4519fc8 centos "/bin/bash" 3 hours ago Exited (0) 4 minutes ago pensive_jackson 5a7a0d694651 busybox "sh" 21 hours ago Exited (0) 21 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 47 hours ago Exited (0) 47 hours ago hopeful_yonath [root@localhost ~]# docker run -d centos /bin/bash -c "nohup ping -i 1000 www.baidu.com" 8aa19c9604382bc019797ccda831ae1bcebd81d86380b6040d636e03000b440a [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8aa19c960438 centos "/bin/bash -c 'nohup…" 2 seconds ago Up 2 seconds adoring_wing c600c4519fc8 centos "/bin/bash" 3 hours ago Exited (0) 5 minutes ago pensive_jackson 5a7a0d694651 busybox "sh" 21 hours ago Exited (0) 21 hours ago hungry_vaughan 4b0296d18849 hello-world "/hello" 47 hours ago Exited (0) 47 hours ago hopeful_yonath
我這里使用nohup在后台運行一個每1000秒ping一次百度的進程,另外你也可以使用"while true; do echo hello world; sleep 1; done",無限輸出hello world。
另外即便是有進程在后台運行,你進入了容器,輸入exit退出,依然會終止容器的運行,請謹記。
Ctrl+P+Q依然是我認為的最佳用法。
作者:輝耀輝耀
鏈接:https://www.jianshu.com/p/b1ce248d2a42
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。