【Docker】compose ファイルの ports は環境変数の方がよくないですか? (original) (raw)
はじめに
少し前から業務にて複数プロジェクトを触るようになりました。
どのプロジェクトもDockerを使用しています。
そのなかでfailed: port is already allocated
をめちゃくちゃ見ることになりました。
このエラー自体はcompose.yaml
のports
を変更するだけで解決する簡単なエラーではあります。
ですが、compose.yaml
に差分が出てしまってめちゃくちゃわずらわしいです...compose.yaml
を変更するためのPR出すときのめんどくささは目も当てられません。
そこで、本稿ではこのわずらわしさを低減するために全てのプロジェクトこうしたらいいんじゃねって方法を共有いたします。
本稿では compose ファイルの ports に環境変数を指定する方法を紹介します。
素直にcompose.yaml
を書いたとき、下記のようになっていると思います。
services: hoge: command: サーバーを起動するコマンド --port xxxx ports: - xxxx:xxxx
failed: port is already allocated
が出たときに普通に解決するには下記のようにしますよね。
services: hoge: command: サーバーを起動するコマンド --port xxxx ports: - xxx1:xxxx
この方法は先述の通り、差分が一生出るので避けたいです。
そこで環境変数ですね。
下記のようにします。
services: hoge: command: サーバーを起動するコマンド --port xxxx ports: - ${HOGE_PORT:-xxxx}:xxxx
簡単すぎる。
HOGE_PORT
が環境変数にあればその値になり、設定されていない、もしくは空の場合にはxxxx
になります。
もちろん、HOGE_PORT
の名前は任意です。値も任意です。
HOGE_PORT
は.env
に設定するのがいいでしょう。
.env
HOGE_PORT=xxx1
.env がgitignoreされてないときはgitignoreしてください
.env.sample
もあれば完璧ですね。
.env.sample
HOGE_PORT=
おわりに
compose.override.yaml
がports
をいい感じにマージしてくれれば何も困らなかったのに...
簡単なのでぜひ全プロジェクトで採用してください!