docker compose down コマンド

 Docker 命令大全Docker コマンド大全


docker compose down次のコマンドによって起動されたすべてのコンテナ、ネットワーク、および関連リソースをdocker compose up停止して削除するために使用します。

実行するとdocker compose up一連のサービスを起動した後、Docker は自動的にコンテナ、ネットワーク、さらには匿名データボリュームを作成します。

だけを使用した場合、docker compose stopコンテナは単に停止(一時停止)するだけで、ディスク領域を占有したままネットワーク設定も残ります。次回起動時に以前の状態が競合を引き起こす可能性があります。

docker compose down一方、down はワンタップで完全にクリーンアップします。コンテナを停止し、コンテナを削除し、ネットワークを削除して、環境をクリーンな状態に戻します。

以下のフローチャートは、down コマンドの完全な実行フローを示しています。

開始ノード docker compose down ステップ 1:SIGTERM ① SIGTERM 信号を送信 各コンテナに停止信号を送信し、グレースフル終了を待ちます ステップ 2:タイムアウトチェック タイムアウト? デフォルト 10秒分岐:タイムアウト である SIGKILL で強制終了分岐:正常終了 いいえ(正常終了)ステップ 3:コンテナの削除 ② すべてのコンテナを削除 Compose プロジェクトで定義されたすべてのコンテナインスタンスを削除します ステップ 4:ネットワークの削除 ③ プロジェクトのネットワークを削除 docker-compose.yml で定義されたネットワーク(デフォルトネットワーク + カスタムネットワーク)を削除します ステップ 5:オプション操作 ④ オプション:データボリュームの削除(-v) / イメージの削除(--rmi) 対応するオプションを指定した場合のみ実行され、デフォルトでは保持されます 終了 プロジェクト環境はクリーンアップされました ✓

現在の環境がクリーンかどうか不明な場合は、まず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-vCompose ファイルで定義された名前付きデータボリュームと、コンテナがマウントしている匿名データボリュームを削除します削除しない
--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 &lt;网络名&gt;  # 删除项目网络

データボリュームも削除:-v / --volumes

データベースのデータやキャッシュなどの永続化コンテンツを含む環境を完全に空にする必要がある場合は、-v を追加します-v:

# 删除容器、网络以及 Compose 文件中定义的所有具名数据卷
docker compose down -v

以下は、-v の影響を-v理解するための完全な比較例です:

例

# docker-compose.yml ファイルの内容
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 ファイルからあるサービスの定義を削除したにもかかわらず、そのサービスのコンテナが残っている場合、これらのコンテナは「孤児コンテナ」と呼ばれます。

例

# 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 を実行するには?

例

#!/bin/bash
# 安全なクリーンアップスクリプト:最初にプロジェクトが実行中か確認し、その後 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 命令大全Docker コマンド大全

その他の拡張