[解決済み] dockerコンテナの実行時にサービスを自動的に開始するには?
質問
私は Dockerfile を使ってコンテナにMySQLサーバをインストールし、このように起動します。
sudo docker run -t -i 09d18b9a12be /bin/bash
しかし、MySQL サービスは自動的に開始されないので、(コンテナ内から)手動で実行する必要があります。
service mysql start
dockerコンテナを実行する際に、MySQLサービスを自動的に起動するにはどうすればよいですか?
どのように解決するのですか?
まず
問題
を使用します。
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 がアクセスできるようになるため、単一のサービスを実行している場合に好まれることが多いです。
-
または、foregroundコマンドを使用して行います。
CMD /usr/bin/mysqld_safe
のようなスクリプトがある場合のみ機能します。
mysqld_safe
.
-
または、スクリプトを
start.sh
で、最後にこう書きます。CMD /start.sh
コマンドが一連のステップを実行する必要がある場合は、やはりこれが最適です。
/start.sh
は実行し続ける必要があります。
備考
を使用する初心者のために
supervisord
はお勧めしません。正直言って、やりすぎです。 コンテナには、単一のサービス、単一のコマンドを使用する方がずっとよいでしょう。
ちなみに https://registry.hub.docker.com 既存の mysql の docker イメージを参照する。
関連
-
[解決済み] docker-compose down default_network エラー
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerでイメージのクリーンビルドを強制する方法
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み] dockerコンテナ内でsudoを使用するには?
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Dockerの初期化に失敗しました
-
[解決済み] docker terminal: IP待ち
-
[解決済み] Docker - デーモンからのエラー応答:クライアントはサーバーよりも新しいです。
-
Docker npm getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
-
docker共通コマンドのまとめ
-
クラウドネイティブ時代に求められるコアスキル Docker Advanced (Dockerネットワーク詳解)
-
接続中にDocker useエラーが発生しました。このエラーは、Docker デーモンが実行されていないことを示す可能性があります。
-
docker base container in bash: sudo: command not found 問題が解決されました。
-
docker学習用イメージの作成にdockerfileを使用した場合の落とし穴
-
UbuntuでDockerインストールしたgogsは、サービスを時々再起動するとアクセスできなくなります。