Compose: env_file的相对路径

创建于 2017-04-26  ·  3评论  ·  资料来源: docker/compose

我的.env文件与docker-compose文件不在同一个文件夹中时,我遇到了问题。 当我将其放置在子文件夹中并对其进行引用时,它将仅表示变量未定义,并且默认为空白字符串。 当我删除.env文件时,它说找不到.env文件,因此它找到了该文件,但什么也没做。 当我将.env文件移动到与docker-compose文件相同的目录并更新其路径或创建符号链接时,一切正常。

显然,docker-compose在加载与docker-compose文件不在同一目录中的env文件时存在问题。

目前,我通过将.env文件与子文件夹中的Laravel项目共享的符号链接来“修复”此问题。

我的docker-compose文件(简体):

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

最有用的评论

嘿@ shin-,我有确切的问题。
我阅读了官方文档(https://docs.docker.com/compose/env-file/),以及您发布的主题,但没有回答我的问题。 正如OP所说的,如果.env文件与docker-compose.yml的路径位于不同的路径,则它将不起作用。

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

在./app/内部,我有自己的带有自己的.env的symfony应用程序,我希望将用于构建映像的env vars放在同一.env中,以使其起作用,我有2 x .env,其中一个在docker-撰写目录和我的应用程序目录中的一个

所有3条评论

先前已回答:

4001

4618

等等

请参见歧义消除页面: https :

嘿@ shin-,我有确切的问题。
我阅读了官方文档(https://docs.docker.com/compose/env-file/),以及您发布的主题,但没有回答我的问题。 正如OP所说的,如果.env文件与docker-compose.yml的路径位于不同的路径,则它将不起作用。

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

在./app/内部,我有自己的带有自己的.env的symfony应用程序,我希望将用于构建映像的env vars放在同一.env中,以使其起作用,我有2 x .env,其中一个在docker-撰写目录和我的应用程序目录中的一个

Afaik环境变量已导入到应用程序中,但是您不能在docker-compose文件中使用它们(就像您使用NGINX_PORT一样。在同一目录中为此文件使用单独的.env文件,如果确实要从应用程序中加载该文件真的需要它。

此页面是否有帮助?
0 / 5 - 0 等级