【发布时间】:2020-01-23 20:59:07
【问题描述】:
我知道我可以使用 dockerfile 的 CMD RUN 和 ENTRYPOINT 命令在容器启动时运行脚本,但是如何让容器在每次容器因故障重新启动时运行脚本?
【问题讨论】:
标签: docker dockerfile
我知道我可以使用 dockerfile 的 CMD RUN 和 ENTRYPOINT 命令在容器启动时运行脚本,但是如何让容器在每次容器因故障重新启动时运行脚本?
【问题讨论】:
标签: docker dockerfile
每次容器启动或重新启动时都会运行入口点。通常的做法是将启动配置放在一个 shell 脚本中,然后 execs 是应用程序的“真实”入口点。 (请参阅 What purpose does using exec in docker entrypoint scripts serve? 了解为什么 exec 很重要)。
请记住,docker 实际上只是文件系统、进程和网络命名空间的包装器。除了重新运行它最初启动的同一进程之外,它无法以任何方式重新启动您的容器。
您可以通过类似这样的调用自己尝试:
docker run -d --restart=always --entrypoint=sh alpine -c "sleep 5; echo Exiting; exit"
如果你 docker logs -f 那个容器,你会看到 Exiting 每 5 秒出现一次。请注意,容器停止也会停止随后的日志,因此您必须再次运行它才能看到下一次重新启动。
【讨论】: