web-dev-qa-db-ja.com

システムの起動時にdockerコンテナーを自動起動するにはどうすればよいですか?

システムの起動時にDockerコンテナーを自動的に起動する良い方法は何ですか?

Ubuntu 14.04でこれを行うための推奨される方法はありますか?

私は過去にsupervisordを使用してWebアプリを自動起動しました。しかし、それはDockerにとって正しいことのようには思えません。

115
Stefan Arentz

どうやら、Dockerコンテナーを自動起動する現在の方法( Docker 1.2から )は restartポリシー を使用することです。これは、起動時にDockerがコンテナーの開始を処理し、コンテナーの終了時にコンテナーを再起動する方法を制御します。これまで「always」オプションを使用してきましたが、システムの起動時にDockerがコンテナーを自動起動することを確認できます。

Sudo docker run --restart=always -d myimage

ドキュメントの抜粋

再起動ポリシーDocker実行で--restartフラグを使用して、終了時にコンテナーを再起動する方法または再起動しない方法の再起動ポリシーを指定できます。

no-終了時にコンテナを再起動しません。

on-failure-コンテナがゼロ以外の終了ステータスで終了した場合にのみ、コンテナを再起動します。

always-終了ステータスに関係なく、常にコンテナを再起動します。

障害時ポリシーを使用しているときにDockerがコンテナーの再起動を試行する最大回数を指定することもできます。デフォルトでは、Dockerはコンテナを再起動しようとします。

$ Sudo docker run --restart=always redis

これにより、redisコンテナーが常に再起動ポリシーで実行されるため、コンテナーが存在する場合、Dockerは再起動します。

$ Sudo docker run --restart=on-failure:10 redis

これにより、再起動ポリシーがon-failureで最大再起動カウントが10のredisコンテナーが実行されます。redisコンテナーがゼロ以外の終了ステータスで10回以上連続して終了すると、Dockerはコンテナーの再起動の試行を中止します。最大再起動制限を指定することは、障害時ポリシーでのみ有効です。

141
aknuds1

Dockerには このページ があり、upstartとsystemdでそれを行う方法を説明しています。私はそれがDockerにとって正しいことのように思われないことに同意します。彼らの解決策は、docker startを実行することです。これは、コンテナーが既に作成されていることを前提としています。私は、upstartスクリプトでdocker run --rmを実行するか(イメージからのまったく新しいプロセスとコンテナーのように扱う)、または起動時にdockerデーモンにコンテナー自体を再起動させる(デフォルトでは他に何もしない場合)。 Upstartには、プロセスの開始/停止が簡単にできるという利点がありますが、Dockerの開始/停止でもそれが可能です!

Upstartスクリプトが機能する前に、ユーザーに手動でコンテナー(すべての正しいポート/ボリュームバインディングを含む)を強制的に作成させるのは奇妙だと思います。

8

しかし、それはDockerにとって正しいことのようには思えません。

何故なの?

私はこれにスーパーバイザを使用し、大きな成功を収めています。

知っていること、機能すること、簡単に維持および理解できるものを使用してください。

6
EEAA