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

容器的创建和运行
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 dockerdocker主进程退出(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)
