Compose: Caminho relativo para env_file

Criado em 26 abr. 2017  ·  3Comentários  ·  Fonte: docker/compose

Tenho um problema com meu arquivo .env quando ele não está na mesma pasta do arquivo docker-compose. Quando eu o coloco em uma subpasta e faço referência a ele, ele simplesmente diz que as variáveis ​​são indefinidas e o padrão é uma string em branco. Quando eu removo o arquivo .env, ele diz que não consegue encontrar o arquivo .env, então ele encontra o arquivo, mas não faz nada. Quando eu movo o arquivo .env para o mesmo diretório do arquivo docker-compose e atualizo seu caminho ou crio um link simbólico, tudo funciona bem.

Aparentemente, docker-compose tem problemas com o carregamento de arquivos env que não estão no mesmo diretório do arquivo docker-compose.

Atualmente eu "consertei" isso vinculando simbolicamente o arquivo .env, pois ele é compartilhado com um projeto Laravel em uma subpasta.

Meu arquivo 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

Comentários muito úteis

Ei @ shin-, eu tenho o problema exato.
Eu li o documento oficial (https://docs.docker.com/compose/env-file/) e os tópicos que você postou, mas que não responderam à minha pergunta. Como OP disse, se o arquivo .env estiver em um caminho diferente do caminho do docker-compose.yml, ele não 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/ eu tenho meu aplicativo symfony com seu próprio .env e quero que os env vars usados ​​para construir as imagens sejam colocados no mesmo .env, para fazer funcionar eu tenho 2 x .env, um no docker- compe dir e um no meu app dir

Todos 3 comentários

Isso foi respondido anteriormente:

4001

4618

etc.

Veja a página de desambiguação: https://docs.docker.com/compose/environment-variables/

Ei @ shin-, eu tenho o problema exato.
Eu li o documento oficial (https://docs.docker.com/compose/env-file/) e os tópicos que você postou, mas que não responderam à minha pergunta. Como OP disse, se o arquivo .env estiver em um caminho diferente do caminho do docker-compose.yml, ele não 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/ eu tenho meu aplicativo symfony com seu próprio .env e quero que os env vars usados ​​para construir as imagens sejam colocados no mesmo .env, para fazer funcionar eu tenho 2 x .env, um no docker- compe dir e um no meu app dir

Afaik as variáveis ​​de ambiente são importadas no aplicativo, mas você não pode usá-las em seu arquivo docker-compose (como você fez com NGINX_PORT. Use um arquivo .env separado para isso no mesmo diretório e carregue-o do aplicativo se você realmente realmente preciso disso.

Esta página foi útil?
0 / 5 - 0 avaliações