docker compose down コマンド
docker compose down次のコマンドによって起動されたすべてのコンテナ、ネットワーク、および関連リソースをdocker compose up停止して削除するために使用します。
実行するとdocker compose up一連のサービスを起動した後、Docker は自動的にコンテナ、ネットワーク、さらには匿名データボリュームを作成します。
だけを使用した場合、docker compose stopコンテナは単に停止(一時停止)するだけで、ディスク領域を占有したままネットワーク設定も残ります。次回起動時に以前の状態が競合を引き起こす可能性があります。
docker compose down一方、down はワンタップで完全にクリーンアップします。コンテナを停止し、コンテナを削除し、ネットワークを削除して、環境をクリーンな状態に戻します。
以下のフローチャートは、down コマンドの完全な実行フローを示しています。
現在の環境がクリーンかどうか不明な場合は、まずdocker compose psで実行中のコンテナを確認してから、down を実行するかどうかを決定してください。
クイックスタート
最も簡単な使い方:ファイルを含むdocker-compose.ymlディレクトリで実行します:
# 进入 Compose 项目目录 cd ~/myproject # 一键停止并清理所有资源 docker compose down
実行後、ターミナルには通常次のような出力が表示されます:
[+] Running 3/3 Container myproject-web-1 Removed 1.2s Container myproject-db-1 Removed 0.8s Network myproject_default Removed 0.3s
このとき:
- Compose によって起動されたすべてのコンテナが停止・削除されました
- プロジェクト専用ネットワークが削除されました
- データボリュームデフォルトでは保持されます(データの誤削除を防ぐため)
コマンドオプション早見表
以下はdocker compose downサポートされている完全なオプション一覧です:
| オプション | 短縮形 | 説明 | デフォルト値 |
|---|---|---|---|
| --volumes | -v | Compose ファイルで定義された名前付きデータボリュームと、コンテナがマウントしている匿名データボリュームを削除します | 削除しない |
| --remove-orphans | 无 | Compose ファイルに存在しなくなったサービスに対応する孤児コンテナを削除します | 削除しない |
| --rmi <type> | 无 | サービスが使用するイメージを削除します。type は選択可能all(すべて)またはlocal(ローカルでビルドされたもののみ) | 削除しない |
| --timeout | -t | コンテナ停止のタイムアウト時間(秒)。タイムアウト後に強制終了します | 10 |
| --dry-run | 无 | 実行予定の操作を表示するだけで、実際には実行しません(v2.21+) | 無効 |
最も注意すべきデフォルト動作:データボリュームはデフォルトでは削除されません。つまり、down を実行しても、データベースのデータはデータボリューム内に保持され、次回 up したときに復元されます。これは保護メカニズムですが、本当に完全にクリーンアップしたい場合は、オプションを付けることを忘れないでください。-v。
詳細な使い方
基本の使い方:停止してクリーンアップ
プロジェクトディレクトリでオプションを付けずに直接実行します:
# 停止并删除容器和网络,保留数据卷 docker compose down
これは、以下を順に実行するのと同等です:
docker compose stop # 停止所有容器 docker compose rm -f # 强制删除所有容器 docker network rm <网络名> # 删除项目网络
データボリュームも削除:-v / --volumes
データベースのデータやキャッシュなどの永続化コンテンツを含む環境を完全に空にする必要がある場合は、-v を追加します-v:
# 删除容器、网络以及 Compose 文件中定义的所有具名数据卷 docker compose down -v
以下は、-v の影響を-v理解するための完全な比較例です:
例
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: サンプル123
volumes:
- db_data:/var/lib/mysql # 名前付きデータボリューム
volumes:
db_data: # 名前付きデータボリュームを定義
# 不带 -v:db_data 数据卷保留,数据库中的数据不丢失 $ docker compose down [+] Running 3/3 Container test-web-1 Removed Container test-db-1 Removed Network test_default Removed # 带 -v:db_data 数据卷被删除,数据库数据永久丢失 $ docker compose down -v [+] Running 4/4 Container test-web-1 Removed Container test-db-1 Removed Volume test_db_data Removed Network test_default Removed
本番環境で down を実行する前に、down -v前によく考えてください。データボリュームを削除すると、データは復元できません。事前にデータをバックアップするか、本番環境以外でのみ使用することをお勧めします。-v。
孤児コンテナのクリーンアップ:--remove-orphans
docker-compose.yml ファイルからあるサービスの定義を削除したにもかかわらず、そのサービスのコンテナが残っている場合、これらのコンテナは「孤児コンテナ」と呼ばれます。
例
services:
app:
image: nginx
networks:
- shared_network # 外部ネットワークを参照
networks:
shared_network:
external: true # 外部ネットワーク。down では削除されません
volumes:
shared_data:
external: true # 外部データボリューム。down -v でも削除されません
これは合理的です。外部リソースは複数の Compose プロジェクトで共有される可能性があるため、単一のプロジェクトがクリーンアップすべきではありません。
コンテナ依存関係の起動順序
down はコンテナを逆順に停止します。つまり、依存する側を先に停止し、依存される側を後から停止します。これは up 時の起動順序の逆で、依存関係が正しく解放されることを保証します。
docker-compose(旧バージョン)との互換性
旧バージョン(ハイフン付き)を使用している場合、docker-composeコマンド形式は次のとおりです:
$ docker-compose down -v
新しい Docker Compose v2 は Compose 機能を Docker CLI に統合し、コマンドは次のようになりましたdocker compose(スペース区切り)。両者のパラメータは完全に同じですが、新しい形式に統一することをお勧めします。
よくある質問
Q: down を実行したのにコンテナがまだ実行中?
考えられる原因:これらのコンテナは現在の Compose ファイルによって作成されたものではなく、docker runまたは他の Compose ファイルで起動されたものです。
用 docker psコンテナの詳細を確認し、コンテナ名のプレフィックスが Compose プロジェクト名と一致しているかを確認してください。
Q: down -v を実行してもディスク容量が解放されない?
未使用のイメージが容量を占有していないか確認します:
$ docker image ls # 查看镜像列表 $ docker image prune -a # 清理未使用的镜像
Docker はイメージを自動的にクリーンアップしないため、手動でdocker image pruneまたはdown --rmi allを使用してまとめてクリーンアップする必要があります。
Q: スクリプト内で安全に down を実行するには?
例
# 安全なクリーンアップスクリプト:最初にプロジェクトが実行中か確認し、その後 down を実行
PROJECT_DIR="/opt/サンプル-app"
if [ -f "$PROJECT_DIR/docker-compose.yml" ]; then
cd "$PROJECT_DIR"
# まず ps で実行中のサービスがあるか確認
if docker compose ps --status running | grep -q .; then
echo "サンプル プロジェクトを停止中..."
docker compose down --remove-orphans
echo "クリーンアップ完了"
else
echo "プロジェクトは実行されていないため、down 操作をスキップします"
fi
else
echo "エラー:docker-compose.yml ファイルが見つかりません"
exit 1
fi
このスクリプトは、クリーンアップ前に基本的なパスチェックと状態判定を行い、誤操作を防ぎます。
その他の拡張
Docker コマンド大全