Я не могу получить скрипт для возврата в bash.Не удается вернуться в сеанс оболочки после сценария
Сценарий стартовал с помощью следующих директив Docker:
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["set -e && /config/startup/init.sh"]
скриптов начальных выглядят следующим образом:
#!/bin/bash
if [ -d /etc/postfix/init.d ]; then
for f in /etc/postfix/init.d/*.sh; do
[ -f "$f" ] && . "$f"
done
fi
echo "[x] Starting supervisord ..."
/usr/bin/supervisord -c /etc/supervisord.conf
bash
И это команда, которую я использовать пнуть изображение в контейнер:
docker run -it --env-file ENV_LOCAL mailrelay
Сценарий инициализации работает как ожидалось (и я вижу вывод из сценариев в пределах /etc/postfix/init.d/
и supervisord
стартует Postfix.
Проблема заключается в том, что сценарий возвращается к родительскому процессу (bash), а не к необходимости запуска нового. После того, как он попадает в supervisord
, сеанс сидит там, требуя Ctrl + C, чтобы вернуть его обратно в приглашение bash
.
Если я оставил вызов bash
в конце сценария init.sh
, Ctrl + D завершает сценарий И контейнер, возвращая меня в ОС хоста (OSX). Если я заменил вызов bash
exit
, он также возвращается к ОС хоста.
supervisord
Ведет себя так, как должно было быть, выполняя на переднем плане этот путь? Я хотел бы иметь возможность легко вернуться в сеанс оболочки контейнера, чтобы проверить, все ли работает. Я ушел с необходимостью Ctrl + D (во второй сеанс bash
), чтобы сделать это?
UPDATE Marc B
вынуть Баш линию, так что вам не начать новую оболочку. и если supervisord не идет в фоновом режиме автоматически, вы можете попробовать запустить его с &, чтобы заставить его на задний план, или, может быть есть дополнительный вариант кли, чтобы заставить его перейти в режим демона
Я попытался удалить последний вызов bash
, но, как я уже упоминал, он все еще сидит там, а Ctrl + D переносит меня в ОС хоста (выходит из контейнера).
Я только что попробовал /usr/bin/supervisord -c /etc/supervisord.conf &
(и оставил звонок до bash
в конце), и он сразу же возвращается в ОС хоста, выходя из контейнера. Я предполагаю, что контейнеру нечего было «делать», и поэтому он остановился.
, если вы хотите, чтобы вернуться к приглашению parentl оболочки , почему вы запускаете NEW bash в конце скрипта? что пинает вас в этот ребенок bash, а не родительский. –
Да, как мне вернуться к родительскому? – AVProgrammer
вынимают строку 'bash', поэтому вы не запускаете новую оболочку. и если супервизор не входит в фоновый режим автоматически, вы можете попробовать запустить его с помощью '&', чтобы заставить его зайти в фоновый режим, или, может быть, есть дополнительный параметр cli, чтобы заставить его перейти в режим демона. –