как в docker-compose.yml сделать доступными переменные из .env если сам файл в другом каталоге '../.env' на винде
ВОПРОС: Как сделать так чтобы переменная
- DB_PORT
была определена в момент вызова up, без указания --env-file
вариант при вызове работает:
docker-compose -f [file].yml --env-file ../.env up
вот так в [file].yml уже не работает:(.env не находит) (находит)из текуших ответов понял что это просто капирует переменные из .env(будут доступны в image) но доступ в самом .yml не дает
env_file:
- ../.env
полный файл:
version: 'v2.23.3-desktop.2'
services:
postgres:
image: postgres:${SOFTWARE_VERSION_TAG}
restart: always
env_file:
- ../.env
ports:
- '${DB_PORT}:5432'
Ответы (3 шт):
Из документации
The .env file should be placed at the root of the project directory next to your compose.yaml file.
При использовании параметра --env-file
The advantage of this method is that you can store the file anywhere and name it appropriately
У меня не воспроизводится.
Я сделал простой образ
FROM alpine
CMD [ "/bin/sh", "-c", "echo $TEXT"]
docker build -t myalpine .
Запускаю его из docker-compose.yaml
version: '2'
services:
alpine:
image: myalpine
env_file:
- ../.env
Файл ../.env
TEXT="Hello, .env!"
Запуск:
PS:docker> docker compose up
[+] Building 0.0s (0/0) docker:default
[+] Running 2/2
✔ Network docker_default Created 0.5s
✔ Container docker-alpine-1 Created 1.0s
Attaching to docker-alpine-1
docker-alpine-1 | Hello, .env!
docker-alpine-1 exited with code 0
Как видите, переменная подхватывается и выводится контейнером.
Версия докера Server: Docker Desktop 4.25.1 (128006)
Версия Windows:
OS Name: Microsoft Windows 11 Home
OS Version: 10.0.22621 N/A Build 22621