状況
本番の compose で動くアプリの調子が悪い。作業者が「きれいに作り直します」と次のコマンドを打とうとしている。compose.yaml には db サービスと名前付きボリューム db-data がある。
実行前に止めるべき理由は?
$ docker compose down -v$ docker compose up -d正答
- -v は詳細表示なので、ログが大量に出て端末が固まる
- down の後に up -d すると、イメージが latest に自動で更新される
- -v で名前付きボリューム db-data が消え、DB のデータが失われる
- down はコンテナを止めるだけなので、作り直しにならない
解説
docker compose down はコンテナとネットワークを削除するが、名前付きボリュームは残す。-v(--volumes)を付けると、compose.yaml の volumes に書いた名前付きボリュームと、コンテナに付いた匿名ボリュームも削除する。db-data に入っている DB のデータが丸ごと消え、up -d で起動しても空の DB になる。多くのコマンドで -v は詳細表示を意味するので取り違えやすい。作り直すだけなら -v なしの down で足りる。up -d は手元にあるイメージを使い、無いときだけ pull する。down は停止だけでなくコンテナの削除まで行う。
参考: docs.docker.com
この問題を含む Docker のテストを制限時間つきで解く
Dockerクイズへ