🐳 Docker Compose でマシン再起動時に自動でコンテナを立ち上げる設定
📋 概要
Docker Compose を使用して、マシン(ホスト)が再起動された際に、自動的にコンテナを立ち上げる方法を解説します。
🚦 再起動ポリシー (restart
オプション)
docker-compose.yml
の各サービスに restart
オプションを設定することで、再起動ポリシーを制御できます。
services:
web:
image: nginx
restart: always # 👈 これで自動再起動を設定
ports:
- "80:80"
✅ 主な restart
ポリシーの種類
ポリシー | 説明 |
---|---|
no |
自動再起動しません(デフォルト設定)。 |
always |
コンテナが停止した場合、常に再起動します。また、ホストマシンが再起動した場合も起動します。 |
on-failure |
コンテナが異常終了した場合に再起動します(正常終了コード以外の場合)。 |
unless-stopped |
always と似ていますが、手動で停止した場合は再起動しません。 |
🆚 always
と unless-stopped
の違い
-
always
: 手動でdocker stop
しても、ホスト再起動後に自動で再起動します。 -
unless-stopped
: 手動でdocker stop
した場合、ホスト再起動後も再開しません。
🛠 設定例: 複数サービスの自動起動
version: '3.9'
services:
app:
image: my-app-image
restart: always # マシン再起動時に自動起動
ports:
- "8080:80"
db:
image: mysql
restart: unless-stopped # 停止したままにしたい場合
environment:
MYSQL_ROOT_PASSWORD: example
-
app
サービスは常に自動起動します。 -
db
サービスは、手動停止していなければ自動起動します。
💡 既存のコンテナに設定を適用する方法
1. docker-compose.yml
を変更した場合
docker-compose down
docker-compose up -d
2. すでに動作中のコンテナに動的に設定を変更する場合
docker update --restart=always <コンテナ名>
🔍 再起動ポリシーの確認方法
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <コンテナ名>
-
always
やunless-stopped
になっていることを確認できます。
⚠️ Docker サービス自体も自動起動設定を確認
もしマシンが再起動された際に、Docker サービス自体が立ち上がらない場合、コンテナも自動起動しません。
✅ Linux で Docker サービスを自動起動に設定
sudo systemctl enable docker
- Docker サービスがシステム起動時に自動で開始されます。
✅ まとめ
-
docker-compose.yml
にrestart: always
やrestart: unless-stopped
を設定する。 - 既存のコンテナには
docker update --restart=always <コンテナ名>
で設定可能。 - Docker サービス自体も
systemctl enable docker
で自動起動設定する。
これで、マシン再起動後も Docker コンテナが自動的に立ち上がるようになります!