State of Docker
State of Docker
Find the current state of a docker container
在默认情况下,指令docker ps
展示了所有的docker容器的现有状态
1 | $ docker ps -a |
以上的输出展示了当前机器中所有容器的Status以及其他的一些细节
我们也可以使用docker inspect
指令来获取单独容器的Status信息
1 | $ docker inspect -f '{{.State.Status}}' mycontainer |
在这里,mycontainer
是我们想要查询当前状态的容器的容器名,也可以用容器ID来代替
Possible States of a Docker Container
在任何情况下,一个Docker container可以有六种可能的States
Created
Docker将created state分配给那些自从创建后从未被启动的容器,因此,这个状态下的container没有CPU和内存分配
使用docker create
指令创建的docker container的Status是created。
1 | $ docker create --name mycontainer httpd |
这里我们使用官方Docker镜像httpd创建了一个Docker container,mycontainer。
当我们想要进行一些大的项目时,这样的容器是非常有用的。
Running
当我们使用docker start
命令启动一个已经创建的容器,它进入了启动状态
1 | $ docker create --name mycontainer httpd |
在上述例子中,我们首先使用官方的httpd Docker image创建一个Docker 容器,然后使用docker start
指令来启动该容器。
使用docker run
指令运行的容器也时相同的主嗯台
1 | $ docker run -itd --name mycontainer httpd |
在这个状态下,容器消耗CPU和内存资源
Restarting
简单来说,这个状态表明容器正在重启
Docker支持四种重启策略,分别是
- no
- on-failure
- always
- unless-stopped
重启策略决定了当容器exit时它的表现。默认情况下,重启策略是no,这意味着在容器exit之后它不会自动被启动
更新重启策略至always
并且使用下面的例子修改容器状态
1 | $ docker run -itd --restart=always --name mycontainer centos:7 sleep 5 |
上述例子将会运行mycontainer并且执行sleep 5
指令然后exit。但是因为我们已经改变了restart policy,在该容器exit之后它会自动重启。
五秒之后,这个容器的状态将是restarting
1 | $ docker inspect -f '{{.State.Status}}' mycontainer |
Exited
当容器内的进程终止时,就会达到这种状态。 在此状态下,容器不会消耗任何 CPU 和内存。
容器可能因为以下几种原因exit
- 容器内的进程已经完成,因此容器exit
- 容器内的进程在运行的时候遇到了错误
- 使用
docker stop
命令有意停止容器 - 运行bash的容器没有设置交互式终端
1 | $ docker run -itd --name mycontainer centos:7 sleep 10 |
无法使用 docker exec
命令访问处于退出状态的容器。 但是,我们可以使用 docker start
或 docker restart
启动容器,然后访问它。
1 | $ docker start mycontainer |
Paused
在此状态下,容器不占用CPU资源,但会消耗内存
1 | $ docker pause mycontainer |
1 | $ docker unpause mycontainer |
Dead
Docker 容器的死状态意味着该容器无法正常运行。 当我们尝试删除容器时会达到此状态,但无法删除,因为某些资源仍在被外部进程使用。 因此,容器被移动到死状态。
处于死状态的容器无法重新启动。 它们只能被移除。 由于处于死状态的容器被部分删除,因此它不会消耗任何内存或 CPU。