如何在容器启动时启动自定义脚本和cron

时间:2019-07-03 04:08:58

标签: bash shell docker cron

我为cron作业创建了一个docker映像(脚本backup.sh)-将文件复制到远程服务器以进行备份。 但是首先-容器启动时,我需要创建ssh密钥并将其添加到远程服务器上的authorized_keys中,以便可以通过rsync连接。

我不知道如何在容器启动时执行两项任务-启动脚本authorize.sh和cron

  • 我试图在脚本backup.sh中调用authorize.sh,但是总是在多个容器中同时调用它,并且那些ssh密钥会相互覆盖,这就是为什么我需要在容器上执行它开始,而不是在cron脚本中

  • 我无法在镜像构建时在dockerfile中调用脚本,因为远程服务器连接是作为环境变量传递的

  • 我尝试使用CMD ['authorize.sh','-f','-d'代替CMD ['crond','-f','-d','8'] ,'8']并在授权脚本中添加crond -f,但是容器在完成authorize.sh

  • 之后停止

Dockerfile

FROM alpine:3.6

RUN apk update; \
    apk upgrade;

RUN apk add bash openssh-client sshpass rsync

RUN mkdir -p /var/export/

COPY backup.sh /usr/local/bin/backup.sh
RUN chmod +x /usr/local/bin/backup.sh

RUN echo '0 */8 * * *   /usr/local/bin/backup.sh' > /etc/crontabs/root

WORKDIR /var/export/

CMD ["crond", "-f", "-d", "8"]

1 个答案:

答案 0 :(得分:0)

这就是Docker的工作方式,当CMD命令完成时,容器将停止。

您可以添加一种loop或某些命令,这些命令在authorize.sh结束时不会完成:

tail -f /dev/null