I have a problem with my .env file when it's not in the same folder as the docker-compose file. When I place it in a subfolder and reference it, it will simply say the variables are undefined and will default to a blank string. When I remove the .env file it says it can't find the .env file, so it finds the file but doesn't do anything. When I move the .env file to the same directory as the docker-compose file and update it's path or create a symlink instead, all works fine.
Apparently docker-compose has issues with loading env files that are not in the same directory as the docker-compose file.
Currently I "fixed" this by symlinking the .env file as it's shared with a Laravel project in a subfolder.
My docker-compose file (simplified):
version: '3'
services:
mysql:
image: mariadb
volumes:
- mysql_data:/var/lib/mysql/data
env_file:
- ./api/.env
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
mysql_data:
This has been answered previously:
etc.
See the disambiguation page: https://docs.docker.com/compose/environment-variables/
Hey @shin- , i have the exact problem.
I read the official doc(https://docs.docker.com/compose/env-file/), and the topics you posted but that didn't answered my question. As OP said, if the .env file is in a different path than the docker-compose.yml's path it doesn't work.
version: '3.7'
services:
postgres:
image: postgres:alpine
restart: always
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
php:
build:
context: .
dockerfile: ./docker/php/Dockerfile
restart: always
env_file:
- ./app/.env
volumes:
- ./app:/usr/src/app
nginx:
image: nginx:1.15.3-alpine
restart: always
volumes:
- ./app:/usr/src/app
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
ports:
- ${NGINX_PORT}:80
depends_on:
- php
Inside ./app/ i have my symfony application with its own .env and i want the env vars used for building the images to be put in the same .env, to make it work i have 2 x .env, one in docker-compose dir and one in my app dir
Afaik the environment variables are imported in the application but you can't use them in your docker-compose file (like you did with NGINX_PORT. Use a separate .env file for that in the same directory and load that from the application if you really really need it.
Most helpful comment
Hey @shin- , i have the exact problem.
I read the official doc(https://docs.docker.com/compose/env-file/), and the topics you posted but that didn't answered my question. As OP said, if the .env file is in a different path than the docker-compose.yml's path it doesn't work.
Inside ./app/ i have my symfony application with its own .env and i want the env vars used for building the images to be put in the same .env, to make it work i have 2 x .env, one in docker-compose dir and one in my app dir