尽管 –restart 标志看起来简单明了,但我在尝试它时提出了一些问题:
- 关于
ENTRYPOINT
定义 - 重启期间实际定义的语义是什么? - 如果我
exec
进入容器(我在 DDC 上)并杀死 -9 进程,它会重新启动,但如果我这样做docker kill
它不会。为什么? - 重启如何与共享数据容器/命名卷交互?
原文由 JoeG 发布,翻译遵循 CC BY-SA 4.0 许可协议
尽管 –restart 标志看起来简单明了,但我在尝试它时提出了一些问题:
ENTRYPOINT
定义 - 重启期间实际定义的语义是什么?exec
进入容器(我在 DDC 上)并杀死 -9 进程,它会重新启动,但如果我这样做 docker kill
它不会。为什么?原文由 JoeG 发布,翻译遵循 CC BY-SA 4.0 许可协议
重启政策
在 Docker run 上使用 –restart 标志,您可以指定容器在退出时应该或不应该如何重新启动的重新启动策略。
当容器上的重启策略处于活动状态时,它将在 docker ps 中显示为 Up 或 Restarting。使用 docker events 查看生效的重启策略也很有用。
docker run --always
无论退出状态如何,始终重新启动容器。当您指定 always 时,Docker 守护程序将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。
我向您推荐有关 重启策略的 文档
重启策略(–restart)
使用 Docker 的 –restart 来指定容器的重启策略。重启策略 > 控制 Docker 守护进程是否在退出后重启容器。 Docker 支持以下重启策略:
无论退出状态如何, 总是 重新启动容器。当您指定 always 时,Docker 守护程序将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。
$ docker run --restart=always redis
原文由 Harold Castillo 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答729 阅读✓ 已解决
1 回答667 阅读✓ 已解决
1 回答606 阅读
今天我有一些时间来调试这个 -> 因为我使用的是“官方” docker 镜像,所以我几乎看不到正在发生的事情。为了解决这个问题,我扩展了官方镜像并调用了我自己的入口点。 Dockerfile:
然后我在
wrapper-entrypoint.sh
脚本中做了一个“set -x”,并调用了原来的:从这里我发现:
ENTRYPOINT
。我使用的官方图像检测到它已经初始化,因此行为不同。这就是为什么我对语义感到困惑的原因。使用-x
让我看到了真正发生的事情。docker kill
停止重新启动,但这就是我所看到的 - 至少在 Docker 数据中心。ENTRYPOINT
脚本可能会根据重启时的状况采取的操作。