Docker:既に作成されているコンテナーに再起動ポリシーを追加する


229

Dockerには、再起動などの場合にコンテナーの再起動を処理する再起動ポリシーと呼ばれるものが追加されています。

これは非常に便利ですが、restart policyコマンドはでのみ機能しdocker run、機能しないことがわかりdocker startます。だから私の質問は:

過去に作成されたコンテナに再起動ポリシーを追加する方法はありますか?


承認された回答を@Yale Huangの回答に変更する必要があります。受け入れられた回答は、現在のバージョンのdockerでは正しくありません。その答えが当時あなたを助けたかもしれないことを理解していますが、今はそれは誤解を招くものです。
Stepan Vavra 2016年

2
できました。警告ありがとうございます。
エンリケモレノテント2016年

回答:


574

最近のバージョンのdocker(1.11以降)には、update次のコマンドがあります。

docker update --restart=always <container>

9
これはDocker 1.11.0で追加されたようです。
phansen

@phansen:確かに
TachyonVortex

4
Docker 1.11以降で機能するという警告付きで、受け入れられた回答になるはずです。
JohnDoe 2017年

6
docker update --restart always <container> docker
engine / admin /

4
docker updateは複数のコンテナIDを受け入れるため、まったく必要ありxargsませんdocker update --restart=always $(docker ps -q)
markusk

49

RestartPolicyを変更するには、2つの方法があります。

  • コンテナーIDを見つけ、Dockerサービス全体を停止し、/ var / lib / docker / containers / CONTAINER_ID / hostconfig.jsonを変更し、RestartPolicy-> Nameを「always」に設定して、Dockerサービスを開始します。
  • docker commit コンテナーを新しいイメージとして、現在のコンテナーを停止してrmし、そのイメージで新しいコンテナーを開始します。

2
コンテナーの停止、編集、コンテナーの開始。魅力のように動作します。編集が無効になっている理由がわかりません。
ミスト

2
最後に、合理的な答え:)
Navin

docker 1.10を搭載した古いサーバーで私のために働いた(質問しないでください😱)。残念ながらdocker update、再起動ポリシーを変更できるのは1.11以降のみです
IgorKupczyński'25年

1

--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がクリーンであることを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.