調査結果
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を更新しても死ななくなる!