コンテナに 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
を使用して、コンテナーの起動時にコマンドを指定する必要があります。CMD
ENTRYPOINT
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を確認してください。