【问题标题】:How to launch custom script AND cron on container start如何在容器启动时启动自定义脚本和 cron
【发布时间】:2019-11-13 17:03:47
【问题描述】:

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

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

  • 我尝试在脚本 backup.sh 中调用 authorize.sh,但它总是在多个容器中同时调用,并且这些 ssh 密钥相互覆盖,这就是我需要在容器上执行此操作的原因开始,而不是在 cron 脚本中

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

  • 我试过用 CMD ['crond', '-f', '-d', '8'] 代替 CMD ['authorize.sh', '-f', '-d' , '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"]

【问题讨论】:

标签: bash shell docker cron


【解决方案1】:

这就是Docker的工作原理,当CMD命令完成后,容器将被停止。

您可以添加某种loop 或一些不会在您的authorize.sh 末尾完成的命令,例如:

tail -f /dev/null

【讨论】:

  • 感谢@linSel,它有效。实际上它甚至可以使用 crond -f,我不明白为什么它第一次没有工作
猜你喜欢
  • 2021-05-19
  • 2020-02-07
  • 2020-08-26
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2016-08-23
相关资源
最近更新 更多