我的.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:
嘿@ 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文件,如果确实要从应用程序中加载该文件真的需要它。
最有用的评论
嘿@ shin-,我有确切的问题。
我阅读了官方文档(https://docs.docker.com/compose/env-file/),以及您发布的主题,但没有回答我的问题。 正如OP所说的,如果.env文件与docker-compose.yml的路径位于不同的路径,则它将不起作用。
在./app/内部,我有自己的带有自己的.env的symfony应用程序,我希望将用于构建映像的env vars放在同一.env中,以使其起作用,我有2 x .env,其中一个在docker-撰写目录和我的应用程序目录中的一个