はじめに
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に準拠した書き方にしていくのが良さそうです。