docker的重启策略
Docker 容器的重启策略具体如下:
-
no
默认策略,在容器退出时不重启容器。启动容器时不添加参数 –restart 即可。 -
on-failure
在容器非正常退出时(退出状态非0),才会重启容器。 -
on-failure:n
在容器非正常退出时重启容器,并且指定重启次数。n 为正整数。如果不指定次数,则会一直重启。 -
always
只要容器退出就重启容器。 -
unless-stopped
在容器退出时总是重启容器,但是 Docker 守护进程启动之前就已经停止运行的容器不算在内。
docker容器的退出状态码
Docker 容器也有退出状态码,这一点类似 Linux 命令。Docker 容器的重启策略就是基于状态码。具体如下:
-
0
表示容器正常退出。例如 stop 容器。 -
非 0
表示容器退出异常(退出状态码采用 chroot 标准)。例如执行 docker run 失败后的容器退出。 -
125
Docker 守护进程本身有错误。 -
126
容器启动后,要执行的默认命令无法调用。 -
127
容器启动后,要执行的默认命令不存在。 -
其他命令状态码
容器启动后在容器内部执行命令,
该命令退出时的返回状态码,就作为容器的退出状态码
。
获取docker容器退出状态码的方法
- 使用docker ps -a的方法
该命令结果的
第 5 列中 Exited 后面括号中的数字就是容器的退出状态码
。如下所示,Exited (1) 33 minutes ago,1 就是这个容器的退出状态码。但是 1 并不是容器本身的退出状态码,而是容器中运行的命令执行失败后退出的状态码。在 Linux 系统定义的命令退出状态码中,1 表示未知,即系统不知道具体错误的原因。这时候就需要看具体的日志来判断。
[root@k8s-master /]# docker ps -a | grep nginx
3e64cad716c0 192.168.100.20:5000/mynginx:latest "nginx" 36 minutes ago Exited (1) 33 minutes ago nginx-demo
容器已经启动,但是忘记使用–restart=always如何补救?
- 使用update命令
[root@k8s-master /]# docker container update --restart=always 3e64cad716c0
3e64cad716c0
- 修改容器的配置文件
vim /var/lib/docker/containers/容器ID/hostconfig.json,找到关键字 RestartPolicy,将 no 改为 always
修改前:
"RestartPolicy:{"Name":"no","MaximumRetryCount":0}
修改后:
"RestartPolicy:{"Name":"always","MaximumRetryCount":0}
重启容器即可。如果无法修改容器的配置,可先将容器停止,修改配置文件后再启动。
版权声明:本文为m0_48638643原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。