Docker Swarm - 获取服务以保持 运行 永远
Docker Swarm - Get Service to Stay Running Forever
我正在创建一个 docker 服务来执行启动程序的命令,但问题是该服务不断终止,因为一旦启动命令完成,docker 认为它已经完成并终止并再次启动它。我想更改此行为,以便 docker 服务运行,完成其命令,然后在其命令完成后永远保持 运行。
我该怎么做?我知道您可以使用 -td
标志对普通的旧 "docker run" 执行此操作,但如何使用撰写文件对 docker 堆栈执行此操作?
编辑:我正在尝试将 "sleep infinity" 命令附加到命令的末尾,如下所示:
FROM ubuntu:16.04
ADD <redacted> /opt/<redacted>
CMD "/opt/<redacted>/start.sh; sleep infinity"
运行 docker stack deploy
结果:
/bin/sh: 1: /opt/<redacted>/start.sh; sleep infinity: not found
首选解决方案,也是 docker 中心中大多数图像使用的解决方案,是将启动脚本重新设计为 运行 您在前台的应用程序。执行此操作的步骤因应用程序而异,因此请查看中心以了解其他人在您之前是如何完成的。
作为回退,您可以将 sleep infinity
或 tail -f /dev/null
之类的命令附加到启动脚本的末尾,这将无限期地阻止。这种回退是一种黑客行为,应该避免。
编辑:要 运行 在脚本之外,您可以将命令更改为 CMD /opt/xyz/start.sh && sleep infinity
(删除双引号)。 Docker 应该把它变成 /bin/sh -c "/opt/xyz/start.sh && sleep infinity"
。请注意,这些是在黑客之上添加黑客,我继续建议您避免使用此解决方案。
CMD "/opt/<redacted>/start.sh; sleep infinity"
这告诉 Docker 找到并 运行 这个可执行文件 file:
/opt/<redacted>/start.sh; sleep infinity
但是那个路径不作为文件存在,所以它告诉你找不到那个。
您需要删除引号,它们会造成混淆。
CMD /opt/<redacted>/start.sh; sleep infinity
现在它将尝试定位并 运行 文件 /opt/<redacted>/start.sh
,然后 运行 使用参数 infinity
执行 sleep
命令。
我正在创建一个 docker 服务来执行启动程序的命令,但问题是该服务不断终止,因为一旦启动命令完成,docker 认为它已经完成并终止并再次启动它。我想更改此行为,以便 docker 服务运行,完成其命令,然后在其命令完成后永远保持 运行。
我该怎么做?我知道您可以使用 -td
标志对普通的旧 "docker run" 执行此操作,但如何使用撰写文件对 docker 堆栈执行此操作?
编辑:我正在尝试将 "sleep infinity" 命令附加到命令的末尾,如下所示:
FROM ubuntu:16.04
ADD <redacted> /opt/<redacted>
CMD "/opt/<redacted>/start.sh; sleep infinity"
运行 docker stack deploy
结果:
/bin/sh: 1: /opt/<redacted>/start.sh; sleep infinity: not found
首选解决方案,也是 docker 中心中大多数图像使用的解决方案,是将启动脚本重新设计为 运行 您在前台的应用程序。执行此操作的步骤因应用程序而异,因此请查看中心以了解其他人在您之前是如何完成的。
作为回退,您可以将 sleep infinity
或 tail -f /dev/null
之类的命令附加到启动脚本的末尾,这将无限期地阻止。这种回退是一种黑客行为,应该避免。
编辑:要 运行 在脚本之外,您可以将命令更改为 CMD /opt/xyz/start.sh && sleep infinity
(删除双引号)。 Docker 应该把它变成 /bin/sh -c "/opt/xyz/start.sh && sleep infinity"
。请注意,这些是在黑客之上添加黑客,我继续建议您避免使用此解决方案。
CMD "/opt/<redacted>/start.sh; sleep infinity"
这告诉 Docker 找到并 运行 这个可执行文件 file:
/opt/<redacted>/start.sh; sleep infinity
但是那个路径不作为文件存在,所以它告诉你找不到那个。
您需要删除引号,它们会造成混淆。
CMD /opt/<redacted>/start.sh; sleep infinity
现在它将尝试定位并 运行 文件 /opt/<redacted>/start.sh
,然后 运行 使用参数 infinity
执行 sleep
命令。