宿主机可能会因某些原因(如宕机)重新启动,默认情况下docker容器是停止状态的,这可能会对某些应用场景带来不便,所以docker提供了--restart参数,在创建容器时设置此参数,docker守护进程将重新启动容器。
1. 创建容器
docker run -d --name test \
--restart=unless-stopped \
-p 8080:8080 \
tomcat:alpine
2. 列出容器
docker ps --format '{{.ID}} {{.Status}} {{.Names}}'
a88aa63d67a9 Up 1 minutes test
注意: 这里ps子命令使用格式化输出,特别是status列表示容器的状态,更多信息请查看参考2。
3. 模拟宕机
# 强制关闭VM电源,并重新开机。
4. 验证容器运行状态
docker ps --format '{{.ID}} {{.Status}} {{.Names}}'
a88aa63d67a9 Up 51 seconds test
docker run --help | grep "restart"
--restart=no Restart policy to apply when a container exits
restart 参数选项
no
默认选项,不会重新启动容器。
on-failure[:max-retries]
容器处于非零退出状态时重新启动容器,使用可选项则会限制重新启动尝试次数。
unless-stopped
无论容器退出状态如何始终重新启动容器,但如果容器之前已处于停止状态,则在守护程序启动时不会启动它。
always
无论容器退出状态如何,Docker守护进程无限期地尝试重新启动容器。
最后来总结下文章中的知识点
参考1 resstart 策略
https://docs.docker.com/engine/reference/run/#restart-policies-restart
参考2 docker ps 格式化do docker
https://docs.docker.com/engine/reference/commandline/ps/