2013-08-04 21 views
12

ドッカーで初期テストを行っています。現時点では私は私のイメージを持っていると私は、実行中のいくつかのコンテナを置くことができます:私はdocker attach container_idを行い、apache2のサービスを開始ドッカーコンテナで自動的にサービスを開始

docker ps 

次にメインコンソールからコンテナをイメージにコミットします。

コンテナを終了した後、コンテナを開始しようとするか、コミットされたイメージから新しいコンテナを1つ実行しようとすると、サービスは常に停止します。

サービスを開始して1つのコンテナを作成または再起動するにはどうすればよいですか?たとえばApacheですか?

答えて

25

EDIT: 私はこの答えをもともと投稿して以来、Dockerについてたくさんのことを学びました。 「Dockerコンテナで自動的にサービスを開始する」は、Dockerの良い使用方法ではありません。代わりに、fleet,Kubernetes、またはMonit/SystemD/Upstart/Init.d/Cronのようなものを使用して、Dockerコンテナ内で実行されるサービスを自動的に開始します。

ORIGINAL ANSWER: コマンド/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の起動コマンドが何であれ)をファイルの末尾の改行に追加します。

イメージに変更を保存し、docker run -i -t IMAGE /bin/bashで再起動すると、添付するとapache2が実行されます。

+0

良い点/etc/bash.bashrc –

+6

'は/ etc/bashの。bashrcは '' docker exec -ti ID bash'を実行するなど、後でコンテナと対話したい場合に問題を引き起こすかもしれないすべてのbashスタートアップで実行されます...これはスタートアップスクリプトを置くための適切な場所ではないと思いますapache2のようなサービス –

+0

Agreed Petr。私はこの答えを投稿してからDockerについて学びましたが、実際にはDockerを実際にどのように使用するのかはまったくありません。 – damick

4

私はあなたができないと思います。あなたができることは、Dockerfileを使ってイメージを作成し、そこにCMDを定義することです。このCMDは、コンテナの起動時に実行されます。サービスの実行を維持するための情報については、基本情報(https://docs.docker.com/reference/builder/)のビルダーのドキュメントとRun a service automatically in a docker containerを参照してください。

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

2

コンテナーを実行するために使用されたルートプロセスが終了すると、コンテナは分離モードで終了しました。 FOREGROUNDモードでApacheサービスを開始する必要があります。

docker run -p 8080:80 -d ubuntu/apache apachectl -D FOREGROUND 

参考:https://docs.docker.com/engine/reference/run/#detached-vs-foreground