Compose: Relativer Pfad zu env_file

Erstellt am 26. Apr. 2017  ·  3Kommentare  ·  Quelle: docker/compose

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

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.

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

Alle 3 Kommentare

Dies wurde zuvor beantwortet:

4001

4618

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

saulshanabrook picture saulshanabrook  ·  3Kommentare

dimsav picture dimsav  ·  3Kommentare

bergtwvd picture bergtwvd  ·  3Kommentare

DhairyashilBhosale picture DhairyashilBhosale  ·  3Kommentare

29e7e280-0d1c-4bba-98fe-f7cd3ca7500a picture 29e7e280-0d1c-4bba-98fe-f7cd3ca7500a  ·  3Kommentare