【Docker】compose ファイルの ports は環境変数の方がよくないですか? (original) (raw)

はじめに

少し前から業務にて複数プロジェクトを触るようになりました。
どのプロジェクトもDockerを使用しています。
そのなかでfailed: port is already allocatedをめちゃくちゃ見ることになりました。
このエラー自体はcompose.yamlportsを変更するだけで解決する簡単なエラーではあります。
ですが、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.yamlportsをいい感じにマージしてくれれば何も困らなかったのに...

簡単なのでぜひ全プロジェクトで採用してください!