docker容器配置重启策略
docker restart policies
docker容器的退出状态码
| 0 | 表示正常退出 |
|---|---|
| 非0 | 表示异常退出(退出状态码采用chroot标准) |
| 125 | Docker守护进程本身的错误 |
| 126 | 容器启动后,要执行的默认命令无法调用 |
| 127 | 容器启动后,要执行的默认命令不存在 |
| 其他命令状态码 | 容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码 |
重启策略配置
在docker run 容器时可以通过 --restart来配置该容器的重启策略,当一个容器配置了重启策略时,在docker ps中可以看到该容器的状态只能为 up 或 restarting
dockers包含的重启策略:
| 重启策略 | 含义 |
|---|---|
| no | 默认的参数,即不重启 |
| on-failure[:max-retries] | 在容器非正常退出时(退出状态非0),才会重启容器,最大重启次数为 max-retries |
| always | 在容器退出时总是重启容器,不论退出状态码为多少。 同时在docker守护进程启动,都会重启该容器 |
| unless-stopped | 在容器退出时总是重启容器,不论退出状态码为多少。但是在docker守护进程启动时已经停止的容器不会重启 |
值得注意的是docker在重启失败时会每次增加一个延迟,避免无谓的重启空占资源,例如某个容器启动失败,并设置了重启策略,一开始延迟100ms,紧接着的每一次重启失败,会延迟2倍的时间,意味着200ms,400ms,800ms and so on。直到docker进程被停止,或者容器被删除。
当该容器重新启动成功时(restart success,并且正常运行了超过10s),这个延迟时间会被重置为100ms
容器的重启信息可以在docker inspect中获取,例如次数与时间
$ docker inspect -f "{{ .RestartCount }}" my-container
# 2
$ docker inspect -f "{{ .State.StartedAt }}" my-container
# 2015-03-04T23:47:07.691840179Z
设置了重启策略的容器,不能被clean up ,即docker rm -v my-container