emahiro/b.log

日々の勉強の記録とか育児の記録とか。

Docker Compose v2 以降環境変数にインラインコマンドが使えないっぽい

Overview

タイトルの通りです。

direnv などを使ってディレクトリごとに環境変数を差し変えることはよくある local の環境構築の手法だと思います。
そして、その環境変数に対してインラインコメントで環境変数を動的に差し替えたいケースなどもよくあると思います。そのために .env ファイルに以下のようなインラインコマンドを書くケースもあると思います。

ENV_NAME=\`some command...\`

このインラインコマンドで動的に取り出した値を環境変数に追加場合、Docker Compose V2 以降だとインラインコマンドが解釈されずに invalid character エラーが発生してしまいます。

Docker Compose はそもそもインラインコマンドを想定していない?

https://docs.docker.com/compose/env-file/#syntax-rules の公式に以下のように書いてありました。

Compose expects each line in an env file to be in VAR=VAL format.

まとめ

もともとインラインコマンドに対応していなかったっぽい。バグかと思ったけどこれは V1 のバグというか曖昧な書式でも受け付けてくれる仕様に助けられているだけでした。
(一瞬調べてくれた同僚にまじで感謝)