Docker容器状态的形成过程

下图中是docker运行的几种状态,带有颜色的圆形块,是都可以在docker ps中查看到的状态

Docker容器状态的形成过程_docker

 

 

容器的创建和运行

  • docker create 创建容器但不会运行(None—create—created)
  • docker start 启动一个已经创建的容器(created—start—running)
  • docker run 创建并启动容器(None—created—start—running)

容器的运行和停止

  • docker start 启动一个停止中的容器(stopped—start—running)
  • docker stop 停止一个运行中的容器(running—die—stop—exited)
  • docker kill 杀死一个运行中的容器(running—die—kill—exited)

容器的重启

  • docker restart 重启一个运行中的容器(running—die—start—running)

容器的暂停

  • docker pause 暂停一个运行中的容器(running—pause—paused)
  • docker unpause 解除容器的暂停(paused—unpause—running)

容器进程退出或内存溢出

进程退出:Container process exited

内存溢出:killed by out of memory

图中红色方框圈出的这两项,都会经过die然后出现一个restart Policy,是否重新启动服务的一个策略,它由你在运行容器时,是否指定了--restart参数,来决定。在之前我们也用到过,如:

docker run -it --name test --restart always centos /bin/bash

–restart

判断是否重启的标准就是硬件原因和内存原因

always:表示不管遇到什么错误都进行重新启动容器

never:不管遇到什么错误都不重启

on-failure:容器状态以非0状态码退出时重新启动容器,on-failure:10,表示重启失败的次数,连续10次还是启动不了就不再重新启动

unless-stopped,无论退出码时什么,始终重新启动容器,不过当daemon启动时,如果容器之前已经为停止状态,不要尝试启动它。

在每次重启容器之前,不断地增加重启延迟[上一次重启的双倍延迟,从100毫秒开始]来防止影响服务器。这意味着daemon将等待100ms,然后200 ms, 400, 800, 1600等等,直到超过on-failure限制,或执行docker stop或docker rm -f。

如果容器重启成功[容器启动后并运行至少10秒],然后delay重置为默认的100ms。
你可以使用on-failure策略指定docker尝试重启容器的最大次数。

  • 容器会根据配置决定是否重启:
  • systemctl stop docker docker主进程退出(running—Container process exited—die—restart Policy—yes/no—running/exited)
  • 内存溢出(running—killed by out of memory—OMM—die—restart Policy—yes/no—running/exited)

容器的删除

    • docker rm 删除一个创建中或停止中的容器(created/stopped—destroy—deleted)