@Ivanoff-i

Как автоматически запускать сервисы при запуске контейнера в docker?

Стоит задача автозапуска внутри контейнера redis и еще несколько команд, оформленных в bash скрипт. Команды эти динамические. Вот так формируется содержимое bash файла из под php

$queue = <<<QUEUE
#!/bin/bash

eval \"QUEUE='{$params['hostname']}_1' COUNT=1 php /root/tracker/resque >> /var/log/resque_worker.log 2>&1 &\"
eval \"QUEUE='{$params['hostname']}_2' COUNT=1 php /root/tracker/resque >> /var/log/resque_worker.log 2>&1 &\"
eval \"QUEUE='{$params['hostname']}_3' COUNT=1 php /root/tracker/resque >> /var/log/resque_worker.log 2>&1 &\"

eval \"php /root/start-workers.php\"

QUEUE;


т.е. при развертывании на каждом сервере они будут отличаться. Все это должно запускаться автоматически при старте контейнера. Пробовал через run --entrypoint, но при запуске контейнера у него постоянно статус restarting. Как это грамотно организовать?
  • Вопрос задан
  • 1199 просмотров
Пригласить эксперта
Ответы на вопрос 3
nazarpc
@nazarpc
Open Source enthusiast
Не вижу в командах ничего динамического кроме нескольких аргументов - eval тут совершенно не нужен.
ПО поводу ошибок - смотрите docker logs container_name, там будет писать если что вывалилось в stderr.
Ответ написан
EgorkZe
@EgorkZe
iOS (Swift), GoLang
Я запускаю sh скрипты так - CMD /etc/nginx/config.sh
Ответ написан
Комментировать
@Ivanoff-i Автор вопроса
CMD - это в Dockerfile. А как эту задачу решить при run контейнера? Например, пишу docker run -td --restart=always --net=host -p 6379 -e SERVER_IP=xx.xx.xx.xx --name name image-name /etc/init.d/redis-server start
Если верить документации docker run [OPTIONS] IMAGE [COMMAND] [ARG...] после IMAGE стоит COMMAND, на его место ставлю /etc/init.d/redis-server start, но тогда у контейнера постоянно статус restarting
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы