Skip to content

今まで知らなかったComposeファイルの探索順序

Published: at 18:03

2行で頼む

ドキュメント

https://docs.docker.com/compose/reference/

-fフラグの説明に以下のように書いてある。

Compose traverses the working directory and its parent directories looking for a docker-compose.yml and a docker-compose.override.yml file

「Composeはワーキングディレクトリとその親ディレクトリを探索して、docker-compose.ymldocker-compose.override.ymlを探す」と書いてある。 parent directoriesなので、1個上のディレクトリになかったら、さらにその1つ上のディレクトリを探す。

この仕様は compose-goWithDefaultConfigPath 関数に実装されている。

ドキュメントの履歴

https://github.com/docker/docker.github.io/commits/master/compose/reference/index.md

2016年のコミットが一番古いが、この時点で上記文章は存在する。 よく使っているのに今まで知らなかった…。

monorepoの開発で利用する

この仕様に気づいたのは、monorepoで開発をしている時だった。 以下のような構成で、レポジトリルートに全てのサービスを結合するdocker-compose.ymlがある。

<monorepo-root>
|-- docker-compose.yml
|
|-- service1
|   |-- Dockerfile
|   |-- Gemfile
|   ...
|
|-- service2
|   |-- Dockerfile
|   |-- package.json
|   ...
version: "3"
services:
  service1:
    image:
      build: ./service1
  service2:
    build: ./service2

service1 を開発する時は service1 ディレクトリにcdする。 cdした先にdocker-compose.ymlが無ければ、レポジトリルートのdocker-compose.ymlを使うことが出来る。

$ cd service1
$ docker compose up service1
$ docker compose exec bin/rails test test/system/top_test.rb # パス補完も効く

おわりに

あけましておめでとうございます。