我为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"]
答案 0 :(得分:0)
这就是Docker的工作方式,当CMD命令完成时,容器将停止。
您可以添加一种loop
或某些命令,这些命令在authorize.sh
结束时不会完成:
tail -f /dev/null