編集:最初にこの回答を投稿して以来、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