Dockerコンテナの実行時にサービスを自動的に開始するにはどうすればいいですか? 質問する

Dockerコンテナの実行時にサービスを自動的に開始するにはどうすればいいですか? 質問する

コンテナに MySQL サーバーをインストールするための Dockerfile があり、次のように起動します。

sudo docker run -t -i 09d18b9a12be /bin/bash

しかし、MySQL サービスは自動的に起動しないため、手動で実行する必要があります (コンテナー内から)。

service mysql start

Docker コンテナを実行するときに MySQL サービスを自動的に開始するにはどうすればよいですか?

ベストアンサー1

まず、あなたの に問題Dockerfileがあります:

RUN service mysql restart && /tmp/setup.sh

Docker イメージは実行中のプロセスを保存しません。そのため、RUNコマンドはフェーズ中にのみ実行され、ビルドが完了すると停止します。代わりに、以下のようにまたはコマンドdocker buildを使用して、コンテナーの起動時にコマンドを指定する必要があります。CMDENTRYPOINT

CMD mysql start

次に、Docker コンテナは実行を継続するためにプロセス (最後のコマンド) を必要とします。そうでない場合、コンテナは終了/停止します。したがって、通常のservice mysql startコマンドを Dockerfile 内で直接使用することはできません。

解決

プロセスを実行し続けるための一般的な方法は 3 つあります。

  • コマンドを使用しservice、その後に終了しないコマンドを追加します。tail -F

    CMD service mysql start && tail -F /var/log/mysql/error.log
    

出力されたログを docker からアクセスできるようになるため、単一のサービスが実行されている場合にこれが好まれることが多いです。

  • またはフォアグラウンドコマンドを使用してこれを行う

    CMD /usr/bin/mysqld_safe
    

これは、のようなスクリプトがある場合にのみ機能しますmysqld_safe

  • またはスクリプトをラップしてstart.sh末尾に置きます

    CMD /start.sh
    

これは、コマンドが一連の手順を実行する必要があり、/start.sh実行を継続する必要がある場合に最適です。

注記

初心者には使用はsupervisordお勧めしません。正直、やりすぎです。コンテナには単一のサービス/単一のコマンドを使用する方がはるかに優れています。

ところで、参考までに既存の MySQL Docker イメージについては、https://registry.hub.docker.comを確認してください。

おすすめ記事