Docker – docker run –restart总是做什么?
虽然–restart标志看起来简单明了,但在试验时却遇到了很多问题:
- 关于
ENTRYPOINT
定义 – 重启期间实际定义的语义是什么? - 如果我进入容器(我在一个DDC),并杀死进程,它会重新启动,但如果我做
docker kill
它不。 为什么? - 重新启动如何与共享数据容器/命名卷交互?
重新启动策略
在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
脚本可能根据重新启动时的条件采取的行动来保存。