Dockerには、再起動などの場合にコンテナーの再起動を処理する再起動ポリシーと呼ばれるものが追加されています。
これは非常に便利ですが、restart policyコマンドはでのみ機能しdocker run
、機能しないことがわかりdocker start
ます。だから私の質問は:
過去に作成されたコンテナに再起動ポリシーを追加する方法はありますか?
Dockerには、再起動などの場合にコンテナーの再起動を処理する再起動ポリシーと呼ばれるものが追加されています。
これは非常に便利ですが、restart policyコマンドはでのみ機能しdocker run
、機能しないことがわかりdocker start
ます。だから私の質問は:
過去に作成されたコンテナに再起動ポリシーを追加する方法はありますか?
回答:
最近のバージョンのdocker(1.11以降)には、update
次のコマンドがあります。
docker update --restart=always <container>
docker update --restart always <container>
docker
docker update
は複数のコンテナIDを受け入れるため、まったく必要ありxargs
ませんdocker update --restart=always $(docker ps -q)
。
RestartPolicyを変更するには、2つの方法があります。
docker commit
コンテナーを新しいイメージとして、現在のコンテナーを停止してrmし、そのイメージで新しいコンテナーを開始します。docker update
、再起動ポリシーを変更できるのは1.11以降のみです
--restart=always
ポリシーを使用すると、再起動時に既存のコンテナの再起動が処理されます。
問題は、Dockerで説明されているように、新しいバージョンのイメージを実行するときに複数のコンテナーがある--restart=always
場合、コンテナーの自動再起動を無効にするにはどうすればよいですか?。
putオプションによってコンテナが存在する場合にコンテナを自動的に削除しようとすると、コンテナが互いに競合する ため
docker run --rm
、--restart=always
ポリシーにも問題があります。
$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm
したがって、この場合は、別のオプションを選択することをお勧めします。ポリシーを停止しない限り--restartです。
$ docker run --rm --restart unless-stopped <image>
このポリシーはと競合しませんdocker run --rm
が、dockerのドキュメントで説明されています。
これはに似て
--restart=always
いますが、コンテナが(手動またはその他の方法で)停止されると、Dockerデーモンが再起動された後でも再起動されません。
したがって、この--restart unless-stopped
ポリシーを使用する場合、ターミナルを閉じるときに誤って停止した場合に再起動が機能することを確認するには、次のように別のターミナルで 1回実行します。
$ docker ps
$ docker restart <container>
強制終了プロセスが前のシェルで終了するまで待ち、それを閉じてそのままにします(終了しないでください)。
残りのターミナルでコンテナがまだ実行されているかどうかをもう一度確認します。
$ docker ps
それがまだ実行されている場合は、安全に再起動してアプリケーションが再起動していることを再度確認し、複数のコンテナーを使用せずにdockerがクリーンであることを確認できます。