一 不太熟悉docker的时候,守护模式[-d 选项] 运行测试官方image,偶尔会遇到运行了容器后,结果在活动容器里看不到的问题,只能增加 -a 选项查看全部状态的container 才可以。比如下面的例子
ubuntu@VM-4-10-ubuntu:~$ docker run -d --name tag1 ubuntu
133f42b7ff91affa40220928bcca987204562286f329cd657136475697b7815c
ubuntu@VM-4-10-ubuntu:~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
133f42b7ff91 ubuntu "bash" 14 seconds ago Exited (0) 13 seconds ago tag1
在网络上找了一个container状态的图【https://blog.csdn.net/duringsummer/article/details/122348742】,一共5种状态,转载如下:
4b1253ed87ad430dba23b21190541340.png
最重要的一个原因就是:这个容器里没有可运行的进程存在,所以被认为可以退出。
二 在这个链接地址,发现的一个解释
docker容器自动退出的原因是什么
https://www.php.cn/docker/490893.html
docker容器会自动退出的原因:
1、docker容器没有前台进程,容器会认为空闲,所以自动退出;
2、容器运行的命令不是一直挂起的命令(比如top、tail、循环等),所以会自动退出。
需要稍微修正一下,其实不管是前台进程,后台进程,都是一样的。如果后台进程也已经退出,且没有其他的前台/后台进程在活动中,则这个容器,就被认为可以退出。
三 这种具有空活动进程的容器,可以重新 start 吗?
答案是肯定的:可以。
但是为什么使用 docker container ls -a 查看,依然是 exited状态呢。
原因就是,重新start之后,容器再次退出了。
四 怎么确认这种空活动进程的容器再次启动了?可以加多一个sleep行为,观察一下
ubuntu@VM-4-10-ubuntu:~$ docker run -d --name tag1 ubuntu sleep 20
28dd80eaa8380340e34223a06060a702e73d2b1c8b62215dd979269a00d2a065
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28dd80eaa838 ubuntu "sleep 20" 16 seconds ago Up 15 seconds tag1
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28dd80eaa838 ubuntu "sleep 20" 31 seconds ago Exited (0) 10 seconds ago tag1
ubuntu@VM-4-10-ubuntu:~$ docker container start tag1 #start重新启动
tag1
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28dd80eaa838 ubuntu "sleep 20" 46 seconds ago Up 2 seconds tag1
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28dd80eaa838 ubuntu "sleep 20" 51 seconds ago Up 6 seconds tag1
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28dd80eaa838 ubuntu "sleep 20" About a minute ago Exited (0) 45 seconds ago tag1
五 其他
5.1 在每次启动的container的时候,给容器自定义冠名,是一个好习惯,可以避免重复运行容器。也方便重新启动或停止。比如下面的例子就重复启动了。
ubuntu@VM-4-10-ubuntu:~$ docker run -d ubuntu
65f8aa55be79eb7f4c049c372f7eb722b1fbd210d4db74a0fdfe1c4c441ec4b5
ubuntu@VM-4-10-ubuntu:~$ docker run -d ubuntu
1bba099d243ac8b2be87b9dce5ce4b13b34eb737582f59329d7ac7055cf37a07
ubuntu@VM-4-10-ubuntu:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bba099d243a ubuntu "bash" 7 seconds ago Exited (0) 6 seconds ago sad_mahavira
65f8aa55be79 ubuntu "bash" 9 seconds ago Exited (0) 8 seconds ago heuristic_keldysh
学海无涯,错误难免,如有发现,尽请指正。
--the end