docker-composeのenvの適用優先度
調査結果
laradockの.envは、同名の環境変数を複数設定した場合、後に設定したもので上書きされる
動機
- laradockを使用している
- laradockの.envファイルをカスタマイズしている
- laradockがバージョンアップし、docker-compose.ymlとenv-exampleに更新があった
- 2.の.envファイルは設定項目に不足があり、docker-compose build等のコマンドが通らなくなる
### pgAdmin ############################################## pgadmin: container_name: pgadmin image: dpage/pgadmin4:latest environment: - "PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}" - "PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}" ports: - "${PGADMIN_PORT}:80" volumes: - ${DATA_PATH_HOST}/pgadmin:/var/lib/pgadmin depends_on: - postgres networks: - frontend - backend
最近あったやつ
env-exampleにPGADMIN_PORT
の設定が追加されたが、カスタムしている.envには設定がないため、
ports: - ":80"
に展開されてパースエラーとなる
疑問
cat env-example env-diff > .env
または
cat env-diff env-example > .env
とすれば、設定項目不足で死ぬことはなくなるのでは?
調査
version: "3" services: busybox: image: busybox:latest environment: - MY_ENV=${MY_ENV}
.env
MY_ENV=1 MY_ENV=2
- envを展開したコンフィグを見る
docker-compose config
services: busybox: environment: MY_ENV: '2' image: busybox:latest version: '3.0'
後に書いたMY_ENV=2
が反映された。
したがって、
cat env-example env-diff > .env
で.envを作れば、laradockを更新しても死ななくなる!