GNU/Linux >> Linux の 問題 >  >> Linux

Docker コンテナーでサービスを自動的に開始する

編集:最初にこの回答を投稿して以来、Docker について多くのことを学びました。 「Docker コンテナーでサービスを自動的に開始する」は、Docker の適切な使用パターンではありません。代わりに、フリート、Kubernetes、または Monit/SystemD/Upstart/Init.d/Cron などを使用して、Docker コンテナー内で実行されるサービスを自動的に開始します。

元の回答:コマンド /bin/bash でコンテナを起動している場合 、次にここで概説した方法でこれを達成できます:https://stackoverflow.com/a/19872810/2971199

したがって、コンテナを docker run -i -t IMAGE /bin/bash で開始する場合 コンテナの起動時に apache2 を自動的に起動する場合は、/etc/bash.bashrc を編集します。 コンテナに /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf を追加します (またはあなたの apache2 start コマンドが何であれ) ファイルの最後の改行に。

変更を画像に保存し、docker run -i -t IMAGE /bin/bash で再起動します 接続すると、apache2 が実行されていることがわかります。


できないと思います。できることは、Dockerfile を使用してイメージを作成し、その中で CMD を定義することです。これは、コンテナーの開始時に実行されます。基本についてはビルダーのドキュメント (https://docs.docker.com/reference/builder/) を参照し、サービスの実行を維持する方法については、Docker コンテナーでサービスを自動的に実行するを参照してください。

Dockerfile を使用してこれを自動化する必要はありません。また、手動コミットでイメージを作成し、コマンド ラインで実行することもできます。次に、実行するコマンドを指定します (これは、Dockerfile CMD が実際に行うことです)。この方法で Dockerfiles CMD をオーバーライドすることもできます。最新の CMD のみが実行されます。これは、1 つを使用してコンテナーを起動した場合のコマンド ライン コマンドです。基本的な docker run -i -t base /bin/bash ドキュメントのコマンドは一例です。コマンドが長くなりすぎる場合は、もちろん便利なスクリプトを作成できます。


使用できるオプションは、Supervisord などのプロセス マネージャーを使用して複数のプロセスを実行することです。誰かが sshd と mongodb でこれを達成しました:https://github.com/justone/docker-mongodb


Linux
  1. 実行中のDockerコンテナでコマンドを実行する方法

  2. Linuxでサービスを有効にする

  3. ホスト ポートを Docker コンテナに転送する

  1. Dockerの概要

  2. Docker コンテナのファイル システムの探索

  3. Docker 内の Docker はボリュームをマウントできません

  1. Dockerの実行と開始と作成:違いの説明

  2. Dockerコンテナを終了する方法

  3. 「docker stats」コマンド出力について