Как запустить пользовательский скрипт и cron при запуске контейнера - PullRequest
0 голосов
/ 03 июля 2019

Я создал образ докера для задания cron (скрипт backup.sh) - он копирует файлы на удаленный сервер для резервного копирования.но сначала - когда контейнер запускается, мне нужно создать ssh-ключи и добавить его к авторизованному ключу на удаленном сервере, чтобы я мог подключиться через rsync.

Я не могу понять, как я могу выполнить две задачи в контейнереstart - запустить скрипт authorize.sh и cron

  • Я пытался вызвать authorize.sh в скрипте backup.sh, но он всегда вызывался одновременно в нескольких контейнерах и техКлюч ssh перезаписывает друг друга, поэтому мне нужно сделать это при запуске контейнера, а не внутри скрипта cron

  • Я не могу вызвать скрипт в файле docker при сборке образа, так какподключения к удаленному серверу передаются как переменные окружения

  • Я пробовал вместо CMD ['crond', '-f', '-d', '8'] do 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"]

1 Ответ

0 голосов
/ 03 июля 2019

так работает Docker, когда команда CMD завершила, контейнер будет остановлен.

вы можете добавить вид loop или какую-то команду, которая не будет завершена в конце вашего authorize.sh чего-токак:

tail -f /dev/null
...