Docker не запускает весь мой скрипт entrypoint.sh - PullRequest
0 голосов
/ 25 сентября 2018

Я создал док-контейнер для поддержки Elasticsearch.Elasticsearch запускается и управляется супервизором, который также установлен на моем док-контейнере.Я создал скрипт entrypoint.sh и добавил в конец моего Dockerfile следующее:

ENTRYPOINT ["/usr/local/startup/entrypoint.sh"]

Мой скрипт entrypoint.sh выглядит следующим образом:

#!/bin/bash -x

# Start Supervisor if not already running
if ! ps aux | grep -q "[s]upervisor"; then
  echo "Starting supervisor service"
  exec/usr/bin/supervisord -nc /etc/supervisor/supervisord.conf

else
  echo "Supervisor is currently running"
fi

echo "creating /.es_created"
touch /.es_created

exec "$@"

Когда я запускаю докерКонтроллер контейнера запускается и, в свою очередь, успешно запускает эластичный поиск.Проблема в том, что он никогда не выполняет последний бит скрипта, создающего файл .es_created.Кажется, как только команда

exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf

выполняется, она просто останавливается там.Я добавил -x в #! / Bin / bash, чтобы я мог вызывать журналы докера для контейнера, и это подтверждает, что он никогда не вызывает последние команды echo и touch.Я чувствую, что, возможно, чего-то не хватает в сценариях точки входа, именно поэтому это происходит, но в конечном итоге я хочу иметь возможность выполнять некоторые команды после запуска эластичного поиска, чтобы я мог настроить правильный индекс и вставить некоторые данные.

1 Ответ

0 голосов
/ 25 сентября 2018

Ваше предположение

Кажется, что когда команда

exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf

выполнена, она просто останавливается.

правильно, потому чтокоманда exec bash действительно имеет следующую семантику: указанная программа выполняется на карту и заменяет родительский процесс оболочки (это системный вызов exec ).

Итаквопрос на самом деле не проблема Docker, скорее это связано с Bash.Для получения более подробной информации о встроенной оболочке exec вы можете, например, взглянуть на этот вопрос о askubuntu или прочитать соответствующий документ в справочном руководстве bash .

Подводя итог, вы должны попытаться просто написать

/usr/bin/supervisord -nc /etc/supervisor/supervisord.conf

Если эта команда действительно выполняется в фоновом режиме, все должно быть в порядке.В противном случае вы можете, конечно, добавить &:

/usr/bin/supervisord -nc /etc/supervisor/supervisord.conf &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...