Dockerfileで2つのCMDサービスを実行する

Dockerfileで2つのCMDサービスを実行する

2つのCMDコマンドを実行できるかどうかを尋ねたいです。 2つのCMDコマンドを入力すると、最後のコマンドのみが実行されます。私が試したことは次のとおりです。

CMD bash /start-script.sh && /usr/bin/supervisord -c /etc/supervisord.conf

ただし、これら2つのサービスは実行されません。

ここは別にあります。CMD

CMD ["/start-script.sh"]
ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "/usr/bin/supervisord", "-c", "/etc/supervisord.conf" ]

答え1

あなたのアプローチはDockerのベストプラクティスから少し離れているので、ここで何をしたいのか考えてみましょう。

簡単に言えば、Dockerのベストプラクティスは、2つのアプリケーションを起動せず、Dockerコンテナで1つのアプリケーションのみを起動する必要があることです。このアドバイスは、アプリケーションが終了するとdockerがコンテナを停止するために意味があります。 1つ以上の場合、基本的に壊れます。

しかし、...助けることができるいくつかの解決策があります。

  • 簡単です。 2つのアプリケーションを起動する単一のシェルスクリプトを起動し、無限ループに入ります。

  • 複数のアプリケーション/サービスを並列に処理できるSupervisordなどのソリューションを使用してください。

両方のソリューションのドキュメントはここにあります。https://docs.docker.com/config/containers/multi-service_container/

個人的に好むのは、共有ボリュームとは別のDockerコンテナを使用することです。 (まだdocker-composeを使用して互いに貼り付けることができます。)これにより、すべてのアプリケーションを完全に制御でき、非常にシンプルで簡単です。

関連情報