Docker завершает работу после выполнения скрипта - PullRequest
0 голосов
/ 30 января 2019

У меня есть Docker-контейнер, начинающийся с команды:

"CMD [\"/bin/bash\", \"/usr/bin/gen_new_key.sh\"]"

Сценарий выглядит так:

#!/bin/bash
/usr/bin/generate_signing_key -k xxxx -r eu-west-2 > /usr/local/nginx/s3_signature_key.txt

{ read -r val1
  read -r val2
  sed -i "s!AWS_SIGNING_KEY!'$val1'!;
          s!AWS_KEY_SCOPE!'$val2'!;
  " /etc/nginx/nginx.conf
} < /usr/local/nginx/s3_signature_key.txt

if [ -z "$(pgrep nginx)" ]
  then
     nginx -c /etc/nginx/nginx.conf
  else
     nginx -s reload
fi

Сценарий работает сам, поскольку я вижу все данные на уровне Docker в / var /lib / docker .. Он предназначен для запуска его cron каждые 5 дней, поскольку ключ подписи AWS, сгенерированный в первой строке, действителен только в течение 7 дней.Как я могу предотвратить завершение работы Docker после того, как скрипт завершит работу и продолжит работу?

1 Ответ

0 голосов
/ 30 января 2019

Вы хотите контейнер, который всегда включен с nginx, и запускаете этот скрипт каждые 5 дней.

Сначала вы можете просто запустить nginx, используя:

CMD ["nginx", "-g", "daemon off;"]

Таким образом, контейнер всегда включен с запущенным nginx.

Затем просто запустите ваш скрипт как обычный скрипт с помощью cron:

chmod +x script.sh
0 0 */5 * * script.sh

РЕДАКТИРОВАТЬ: так как скрипт должен запускаться в первый раз

1) одинРешение (красивое) заключается в том, чтобы вручную загрузить действительный ключ подписи AWS в первый раз.После этого в первый раз скрипт автоматически обновит действительный ключ подписи AWS.(используя ранее представленное решение)

2) другое решение - запустить файл точки входа в докер (это ваш скрипт)

# Your script
COPY docker-entrypoint.sh /usr/local/bin/
RUN ["chmod", "+x", "/usr/local/bin/docker-entrypoint.sh"]

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

# Define default command.
CMD ["/bin/bash"]

В вашем скрипте:

service nginx start
echo "Nginx is running."

#This line will prevent the container from turning off
exec "$@";

+ информация о причине и решении использовать строку exec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...