はじめに
Docker を使用してMySQLの環境構築をしていたところ、docker compose up
を叩くとversion is obsolete
という謎の警告が出てきました。
問題
docker-compose.ymlを作成し、コンテナを起動したところ、以下のような警告が出ました。
$ docker compose up
WARN[0000]/Users/user/app/docker-compose.yml: `version` is obsolete
バージョンに問題があるのかなと思い、Dockerのドキュメントで原因を探ってみました。
作業ディレクトリ内での、Compose ファイルのデフォルトのパスは compose.yaml (推奨)か compose.ymlです。
Compose 実装は、下位互換性のために docker-compose.yaml と docker-compose.yml もサポート すべきです。
両方のファイルが存在する場合、 Compose 実装は標準である compose.yaml を優先 しなければいけません。
原因
- versionの値を見てComposeファイルの検証を行うべきではないとされており、
Compose V2
を使う限りにおいてはもはや不要な項目であった。 - Composeのバージョンが最新になったことによるものだった。
-
Compose V1
では、このversionの値を見てComposeファイルの検証が行われていた。
以上の3点から、バージョンが最新になったことでversion
プロパティが廃止されたためであり、docker-compose.yml
ファイルのversion
を削除すれば良いことがわかりました。
解決方法
version: "3.9" # この行を削除すれば良い
services:
db:
container_name: MySQL
build:
context: .
dockerfile: Docker/MySQL/Dockerfile
....
また、ファイル名をdocker-compose.yml
→ compose.yaml
に変更も行い、無事動作しました。
まとめ
今回の警告は Composeのバージョンが新しくなったことによるものでした。
Docker Compose V2によって新しく使えるようになったものもあります。
既存のdocker-compose.ymlをわざわざ修正するほどのコストをかけるべきでは無いかもしれませんが、新しく作る場合はCompose Specに準拠した書き方にしていくのが良さそうです。