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:
Isso foi respondido anteriormente:
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.
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.
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