Tengo un problema con mi archivo .env cuando no está en la misma carpeta que el archivo docker-compose. Cuando lo coloco en una subcarpeta y hago referencia a él, simplemente dirá que las variables no están definidas y por defecto serán una cadena en blanco. Cuando elimino el archivo .env, dice que no puede encontrar el archivo .env, por lo que encuentra el archivo pero no hace nada. Cuando muevo el archivo .env al mismo directorio que el archivo docker-compose y actualizo su ruta o creo un enlace simbólico, todo funciona bien.
Aparentemente, docker-compose tiene problemas para cargar archivos env que no están en el mismo directorio que el archivo docker-compose.
Actualmente "arreglé" esto al vincular el archivo .env ya que está compartido con un proyecto de Laravel en una subcarpeta.
Mi archivo docker-compose (simplificado):
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:
Esto ha sido respondido previamente:
etc.
Vea la página de desambiguación: https://docs.docker.com/compose/environment-variables/
Hey @ shin-, tengo el problema exacto.
Leí el documento oficial (https://docs.docker.com/compose/env-file/) y los temas que publicaste, pero que no respondieron a mi pregunta. Como dijo OP, si el archivo .env está en una ruta diferente a la ruta de docker-compose.yml, no funciona.
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
Dentro de ./app/ tengo mi aplicación Symfony con su propio .env y quiero que las vars de env que se usan para construir las imágenes se pongan en el mismo .env, para que funcione tengo 2 x .env, uno en docker- redactar dir y uno en mi aplicación dir
Afaik, las variables de entorno se importan en la aplicación, pero no puede usarlas en su archivo docker-compose (como lo hizo con NGINX_PORT. Use un archivo .env separado para eso en el mismo directorio y cárguelo desde la aplicación si realmente realmente lo necesito.
Comentario más útil
Hey @ shin-, tengo el problema exacto.
Leí el documento oficial (https://docs.docker.com/compose/env-file/) y los temas que publicaste, pero que no respondieron a mi pregunta. Como dijo OP, si el archivo .env está en una ruta diferente a la ruta de docker-compose.yml, no funciona.
Dentro de ./app/ tengo mi aplicación Symfony con su propio .env y quiero que las vars de env que se usan para construir las imágenes se pongan en el mismo .env, para que funcione tengo 2 x .env, uno en docker- redactar dir y uno en mi aplicación dir