2017-06-12 133 views
0

我想自定义 https://github.com/erkules/codership-imagesDockerfile入口点

我在Dockerfile创建一个cron作业,并试图用CMD运行它,知道Dockerfile为erkules图像具有以下系统信息库提供的泊坞窗图像入口点["/entrypoint.sh"]。它没有工作。

我试图创建一个单独的cron-entrypoint.sh并将其添加到dockerfile中,然后测试像这样的ENTRYPOINT ["/entrypoint.sh", "/cron-entrypoint.sh"]。但也得到一个错误。

我尝试将cron作业添加到erkules映像的entrypoint.sh中,当我将它放在开头时,容器运行cron作业但不执行其余的entrypoint.sh。当我把cron脚本放在entrypoint.sh的末尾时,cron作业不会运行,但是entrypoint.sh中的任何东西都会被执行。

如何通过Dockerfile同时运行erkules图像的entrypoint.sh和我的cron作业中的内容?

+0

它应该是ENTRYPOINT [“./entrypoint.sh”]吗? –

+0

将'crond'添加到entrypoint.sh –

+0

不需要......只要我可以同时运行entrypoint.sh和cron作业 – montatich

回答

0

您需要发送cron命令背景,所以无论使用&或删除-f-f means: Stay in foreground mode, don't daemonize.

所以,在你entrypoint.sh:

#!/bin/bash 
cron -f & 
(
# the other commands here 
) 

编辑:我完全同意@BMitch关于你应该处理多个进程的方式,但是在同一个容器中,这是不推荐的。

见的例子在这里:https://docs.docker.com/engine/admin/multi-service_container/

+0

谢谢..我非常感谢你的帮助 – montatich

+0

不客气。 – Robert

0

看的第一件事情是你是否需要在同一容器中运行多个应用程序。理想情况下,容器只能运行一个应用程序。您可以为不同的应用运行多个容器,并将它们连接在一起使用相同的网络或共享音量以实现您的目标。

假设您的设计需要多个应用程序在同一个容器中,则可以在后台启动一些应用程序并在前台运行最后一个应用程序。但是,我会倾向于使用管理多个进程的工具。我能想到的两种工具是我的头顶上的supervisord和工头。使用诸如supervisord之类的优点是,它将处理信号以干净地关闭应用程序,并且如果一个进程死亡,则可以将其配置为自动重新启动该应用程序或考虑容器失败和异常结束。