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」として説明されているので詳しくはこっちをみてね。