Compose: Chemin relatif vers env_file

Créé le 26 avr. 2017  ·  3Commentaires  ·  Source: docker/compose

J'ai un problème avec mon fichier .env lorsqu'il n'est pas dans le même dossier que le fichier docker-compose. Lorsque je le place dans un sous-dossier et que je le référence, il dira simplement que les variables ne sont pas définies et seront par défaut une chaîne vide. Lorsque je supprime le fichier .env, il dit qu'il ne peut pas trouver le fichier .env, donc il trouve le fichier mais ne fait rien. Lorsque je déplace le fichier .env dans le même répertoire que le fichier docker-compose et que je mets à jour son chemin ou que je crée un lien symbolique à la place, tout fonctionne bien.

Apparemment, docker-compose a des problèmes avec le chargement de fichiers env qui ne se trouvent pas dans le même répertoire que le fichier docker-compose.

Actuellement, j'ai "corrigé" cela en liant symboliquement le fichier .env tel qu'il est partagé avec un projet Laravel dans un sous-dossier.

Mon fichier docker-compose (simplifié):

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

Commentaire le plus utile

Hey @ shin-, j'ai le problème exact.
J'ai lu la doc officielle (https://docs.docker.com/compose/env-file/), et les sujets que vous avez publiés mais qui n'ont pas répondu à ma question. Comme OP l'a dit, si le fichier .env est dans un chemin différent de celui du docker-compose.yml, cela ne fonctionne pas.

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

À l'intérieur de ./app/ j'ai mon application symfony avec son propre .env et je veux que les variables d'environnement utilisées pour créer les images soient placées dans le même .env, pour que cela fonctionne, j'ai 2 x .env, un dans docker- composez le répertoire et un dans le répertoire de mon application

Tous les 3 commentaires

Cela a été répondu précédemment:

4001

4618

etc.

Voir la page d'homonymie: https://docs.docker.com/compose/environment-variables/

Hey @ shin-, j'ai le problème exact.
J'ai lu la doc officielle (https://docs.docker.com/compose/env-file/), et les sujets que vous avez publiés mais qui n'ont pas répondu à ma question. Comme OP l'a dit, si le fichier .env est dans un chemin différent de celui du docker-compose.yml, cela ne fonctionne pas.

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

À l'intérieur de ./app/ j'ai mon application symfony avec son propre .env et je veux que les variables d'environnement utilisées pour créer les images soient placées dans le même .env, pour que cela fonctionne, j'ai 2 x .env, un dans docker- composez le répertoire et un dans le répertoire de mon application

Afaik les variables d'environnement sont importées dans l'application mais vous ne pouvez pas les utiliser dans votre fichier docker-compose (comme vous l'avez fait avec NGINX_PORT. Utilisez un fichier .env séparé pour cela dans le même répertoire et chargez-le depuis l'application si vous vraiment besoin.

Cette page vous a été utile?
0 / 5 - 0 notes