Dockerの再起動ポリシー restart always と unless-stopped についての違いについてまとめ

DockerやDocker Composeを使っていると再起動ポリシーに何をしているか悩むときがあります。

デフォルト設定では、「no」の再起動しないが指定されています。

悩むのは、alwaysかunless-stoppedのどちらにしようかというところだと思います。
今回はこの2つの違いについて簡単にまとめておきます。

広告

テーブルでまとめるとこんな感じ

テーブルにまとめるとこんな感じ。

再起動ポリシー 説明 Dockerデーモン起動時の振る舞い コンテナ停止時の振る舞い 手動停止後の振る舞い docker-compose down後の振る舞い
restart always コンテナを常に稼働させることを目的としている。 コンテナは自動的に再起動される。 コンテナは自動的に再起動される。 Dockerデーモン再起動後、コンテナは自動的に再起動される。 コンテナは削除されるため、自動再起動されない。
unless-stopped ユーザーの制御を尊重し、意図しない再起動を避ける。 コンテナは自動的に再起動される(手動停止されていない場合)。 コンテナは自動的に再起動される。 Dockerデーモン再起動後、コンテナは再起動されない。 コンテナは削除されるため、自動再起動されない。

rebootやsystemctl restart dockerのようなシステムレベルでの再起動操作が行われると、alwaysポリシーを持つコンテナは自動的に再起動を試みます。
unless-stoppedポリシーの場合も同様ですが、docker stopコマンドで停止されている場合は再起動しません。

docker-compose downコマンドは、指定されたコンテナを停止し、削除します。このコマンドが実行されると、関連するコンテナは削除されるため、再起動ポリシーに関わらずOSの再起動後に自動的に復帰することはないです。

公式サイトでは「Start containers automatically」として説明されているので詳しくはこっちをみてね。