Ich habe ein Problem mit meiner .env-Datei, wenn sie sich nicht im selben Ordner wie die Docker-Compose-Datei befindet. Wenn ich es in einen Unterordner lege und darauf verweise, heißt es einfach, dass die Variablen undefiniert sind und standardmäßig eine leere Zeichenfolge verwendet wird. Wenn ich die .env-Datei entferne, wird angezeigt, dass die .env-Datei nicht gefunden werden kann. Daher wird die Datei gefunden, es wird jedoch nichts ausgeführt. Wenn ich die .env-Datei in dasselbe Verzeichnis wie die Docker-Compose-Datei verschiebe und ihren Pfad aktualisiere oder stattdessen einen Symlink erstelle, funktioniert alles einwandfrei.
Anscheinend hat Docker-Compose Probleme beim Laden von Env-Dateien, die sich nicht im selben Verzeichnis wie die Docker-Compose-Datei befinden.
Derzeit habe ich dies "behoben", indem ich die ENV-Datei mit einem Laravel-Projekt in einem Unterordner verknüpft habe.
Meine Docker-Compose-Datei (vereinfacht):
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:
Dies wurde zuvor beantwortet:
usw.
Siehe die Disambiguierungsseite: https://docs.docker.com/compose/environment-variables/
Hey @ shin-, ich habe das genaue Problem.
Ich habe das offizielle Dokument (https://docs.docker.com/compose/env-file/) und die von Ihnen geposteten Themen gelesen, aber das hat meine Frage nicht beantwortet. Wie OP sagte, funktioniert es nicht, wenn sich die .env-Datei in einem anderen Pfad als der Pfad der docker-compose.yml befindet.
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
In ./app/ habe ich meine Symfony-Anwendung mit einer eigenen .env und ich möchte, dass die zum Erstellen der Bilder verwendeten env-Variablen in dieselbe .env-Datei eingefügt werden, damit sie funktioniert. Ich habe 2 x .env, eine in Docker-. komponiere dir und eins in meinem app dir
Afaik die Umgebungsvariablen werden in die Anwendung importiert, aber Sie können sie nicht in Ihrer Docker-Compose-Datei verwenden (wie Sie es mit NGINX_PORT getan haben. Verwenden Sie dafür eine separate .env-Datei im selben Verzeichnis und laden Sie diese aus der Anwendung, wenn Sie dies wirklich tun brauche es wirklich.
Hilfreichster Kommentar
Hey @ shin-, ich habe das genaue Problem.
Ich habe das offizielle Dokument (https://docs.docker.com/compose/env-file/) und die von Ihnen geposteten Themen gelesen, aber das hat meine Frage nicht beantwortet. Wie OP sagte, funktioniert es nicht, wenn sich die .env-Datei in einem anderen Pfad als der Pfad der docker-compose.yml befindet.
In ./app/ habe ich meine Symfony-Anwendung mit einer eigenen .env und ich möchte, dass die zum Erstellen der Bilder verwendeten env-Variablen in dieselbe .env-Datei eingefügt werden, damit sie funktioniert. Ich habe 2 x .env, eine in Docker-. komponiere dir und eins in meinem app dir