Docker – docker run –restart总是做什么?

虽然–restart标志看起来简单明了,但在试验时却遇到了很多问题:

  1. 关于ENTRYPOINT定义 – 重启期间实际定义的语义是什么?
  2. 如果我进入容器(我在一个DDC),并杀死进程,它会重新启动,但如果我做docker kill它不。 为什么?
  3. 重新启动如何与共享数据容器/命名卷交互?

重新启动策略

在Docker运行中使用–restart标志,可以指定一个重启策略,以便在退出时应该或不应该重启容器。

在容器上重新启动策略处于活动状态时,将显示为在Docker ps中的“启动”或“重新启动”。 使用docker事件来查看重启策略是有用的。

docker运行 – 总是

无论退出状态如何,始终重新启动容器。 当你总是指定的时候,Docker守护进程会尝试无限期地重启容器。 无论容器的当前状态如何,容器也将始终在守护进程启动时启动。

我向你推荐这个关于重启策略的文档

重新启动策略

重新启动策略 – 更多细节

今天我有一些时间去debugging,因为我正在使用一个“官方”docker图像,我几乎没有看到发生的事情。 为了解决这个问题,我扩展了官方的形象,并调用了我自己的入口点。 Dockerfile:

 FROM officialImage:version ENV envOne=value1 \ envTwo=value2 COPY wrapper-entrypoint.sh / ENTRYPOINT ["/wrapper-entrypoint.sh"] 

然后我在wrapper-entrypoint.sh脚本中做了一个“set -x”,并调用原来的:

 #!/bin/bash set -x echo "Be pedantic: all args passed: $@" bash -x ./original-entrypoint.sh "$@" 

从这我发现:

  • 重新启动调用与原始参数的原始ENTRYPOINT 。 我使用的官方图片发现它已经初始化,因此采取了不同的行动。 这就是为什么我对语义感到困惑。 使用-x让我看看到底发生了什么。
  • 我仍然不知道为什么docker kill停止重新启动,但这就是我所看到的 – 至less在Docker Data Center上。
  • 我不相信共享数据卷会以任何方式影响这个,对于一个给定的ENTRYPOINT脚本可能根据重新启动时的条件采取的行动来保存。