У меня проблема с моим файлом .env, когда он не находится в той же папке, что и файл docker-compose. Когда я помещаю его в подпапку и ссылаюсь на него, он просто говорит, что переменные не определены, и по умолчанию используется пустая строка. Когда я удаляю файл .env, он говорит, что не может найти файл .env, поэтому он находит файл, но ничего не делает. Когда я перемещаю файл .env в тот же каталог, что и файл docker-compose, и обновляю его путь или вместо этого создаю символическую ссылку, все работает нормально.
По-видимому, у docker-compose есть проблемы с загрузкой файлов env, которые не находятся в том же каталоге, что и файл docker-compose.
В настоящее время я «исправил» это, установив символическую ссылку на файл .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:
На это уже был дан ответ:
и т.п.
См. Страницу значений неоднозначности: https://docs.docker.com/compose/environment-variables/
Привет, @ 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/ у меня есть приложение symfony с собственным .env, и я хочу, чтобы переменные env, используемые для создания изображений, были помещены в тот же .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/ у меня есть приложение symfony с собственным .env, и я хочу, чтобы переменные env, используемые для создания изображений, были помещены в тот же .env, чтобы он работал, у меня есть 2 x .env, один в docker- создать каталог и один в моем каталоге приложения