В моем Dockerfile я запускаю скрипт:
RUN /bin/sh -c scripts/init.sh
Внутри init.sh
все команды, заканчивающиеся на &
, не выполняются: я не могу запустить фоновые процессы.
Есть идеи почему?
У меня была похожая проблема, и что-то вроде следующего помогло мне.
RUN nohup bash -c "scripts/init.sh &" && sleep 4
Во многих случаях запущенный вами сервер еще не полностью готов. Чтобы дать серверу немного больше времени для подготовки, добавьте команду sleep. Размер спящего аргумента должен зависеть от службы, которую вы запускаете, и вам, вероятно, нужно настроить ее.
Подробнее об этом документе
Моя первая идея - создавать сервисы внутри контейнера вместо запуска их с помощью nohup
или &
, запускать их как системный сервис, и вам не нужно обрабатывать их в init.sh.
Но это не "настоящий" подход к докеру. Если вам нужно запустить более 1 службы, разделите их на разные контейнеры (1 контейнер - 1 служба) и соедините их все вместе с помощью решения docker-compose.