スクリプトを 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
init スクリプトは期待どおりに実行されます (/etc/postfix/init.d/
ディレクトリ内のスクリプトからの出力が表示され、 supervisord
Postfix.
問題は、新しいプロセスを開始する必要があるのではなく、スクリプトを親プロセス (bash) に戻すことです。ヒットした後、セッションはそこに留まり、プロンプトsupervisord
に戻るには Ctrl+C が必要です。bash
bash
スクリプトの最後でへの呼び出しを中断するとinit.sh
、Ctrl+D でスクリプトとコンテナーが終了し、ホスト OS (osx) に戻ります。bash
呼び出しをに置き換えるexit
と、ホスト OS にも返されます。
supervisord
このようにフォアグラウンドで実行することによって、想定どおりに動作していますか? コンテナー シェル セッションに簡単に戻って、動作しているかどうかを確認できるようにしたいと考えています。これを行うには、Ctrl+D (セカンダリbash
セッションへ) を実行する必要がありますか?
UPDATE マークB
新しいシェルを起動しないように、bash の行を削除します。また、supervisord が自動的にバックグラウンドに移行しない場合は、 & を使用して実行して強制的にバックグラウンドに移行するか、強制的にデーモン モードに移行する追加の cli オプションがある可能性があります。
への最後の呼び出しを削除しようとしましたbash
が、前述したように、それはまだそこにあり、Ctrl+D でホスト OS に移動します (コンテナーを終了します)。
試してみたところ/usr/bin/supervisord -c /etc/supervisord.conf &
(最後に呼び出しをやめたbash
ところ)、すぐにホストOSに戻り、コンテナを終了しました。コンテナには「する」ことが何も残っていなかったので、停止したと思います。