虽然看起来--restart标志简单明了,但在尝试时我想出了一些问题:
ENTRYPOINT
定义 - 重启期间实际定义的语义是什么?exec
进入容器(我在DDC上)并杀死-9进程,它会重新开始,但是如果我docker kill
它没有。为什么?答案 0 :(得分:5)
要为容器配置重启策略,请在使用docker run命令时使用--restart标志。 --restart标志的值可以是以下任意值:
no
不要自动重启容器。 (默认)
on-failure
如果由于错误而退出容器,请重新启动容器 表现为非零退出代码。
always
如果容器停止,则始终重新启动它。如果是手动 停止,仅在Docker守护程序重启或 容器本身是手动重新启动的。
unless-stopped
与always
相似,不同之处在于: 已停止(手动或其他方式),即使在Docker之后也不会重新启动 守护程序重新启动。
以下示例启动Redis容器并将其配置为始终重新启动,除非该容器已显式停止或重新启动Docker。
$ docker run -d --restart unless-stopped redis
此命令更改已运行的名为redis的容器的重启策略。
$ docker update --restart unless-stopped redis
并且此命令将确保所有当前正在运行的容器都将重新启动,除非已停止。
$ docker update --restart unless-stopped $(docker ps -q)
重启策略详细信息
使用重新启动策略时请注意以下几点:
答案 1 :(得分:2)
重新启动政策
在Docker上运行--restart标志,您可以指定一个重启策略,说明在退出时应该或不应该重新启动容器。
当容器上的重启策略处于活动状态时,它将在docker ps中显示为Up或Restarting。使用docker事件查看生效的重启策略也很有用。
docker run --always
无论退出状态如何,始终重启容器。当你 指定始终,Docker守护程序将尝试重新启动容器 无限期。容器也将始终在守护进程启动时启动, 无论容器的当前状态如何。
我建议您提供有关重新启动政策
的文档答案 2 :(得分:0)
今天我有更多的时间来调试这个 - >因为我正在使用一位官员' docker image我几乎看不到正在发生的事情。为了解决这个问题,我扩展了官方图像并调用了我自己的入口点。 Dockerfile:
FROM officialImage:version
ENV envOne=value1 \
envTwo=value2
COPY wrapper-entrypoint.sh /
ENTRYPOINT ["/wrapper-entrypoint.sh"]
然后我做了一套#x'在wrapper-entrypoint.sh
脚本中并调用原始文件:
#!/bin/bash
set -x
echo "Be pedantic: all args passed: $@"
bash -x ./original-entrypoint.sh "$@"
从此我发现:
ENTRYPOINT
。我使用的官方图像检测到它已经初始化,因此行为不同。这就是为什么我对语义感到困惑。使用-x
让我看到了真正发生的事情。docker kill
会停止重启,但这就是我所看到的 - 至少在Docker数据中心。ENTRYPOINT
脚本根据重启时的条件可能采取的操作。