Compose: Ruta relativa a env_file

Creado en 26 abr. 2017  ·  3Comentarios  ·  Fuente: docker/compose

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:
kinquestion

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.

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

Todos 3 comentarios

Esto ha sido respondido previamente:

4001

4618

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones