#docker #docker-compose #environment-variables #interpolation #substitution
Вопрос:
Мне нужна помощь со следующим шаблоном:
services:
nginx:
image: nginx
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-${COMPOSE_PROJECT_NAME}.rule=Host(`fuu.bar`)"
networks:
- treafik
Моя цель-создать шаблон, который я могу использовать, например, в portainer с почти нулевой конфигурацией.
Я думал, что в конфигурации docker-compose доступны следующие переменные, но выражение ${COMPOSE_PROJECT_NAME}
приводит к пустой строке: docker-compose config
services:
nginx:
image: nginx
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-.rule=Host(`fuu.bar`)"
networks:
- treafik
Существуют ли какие-либо переменные среды по умолчанию, предоставляемые docker-compose, которые я могу использовать для интерполяции среды?
—- Обновление
Я использую traefik (v2) в качестве обратного прокси-сервера. Чтобы сделать контейнеры доступными через treafik, вам необходимо определить маршрутизаторы для каждой службы. Имя маршрутизатора должно быть уникальным. Давайте представим, что вы развертываете 2 или более стеков вышеприведенного шаблона. Имя маршрутизатора должно быть уникальным для всех служб во всех стеках. Поскольку я ленивый парень, я попытался просто интегрировать переменную среды COMPOSE_PROJECT_NAME
(которая, как я знаю, уже уникальна в моей настройке, потому что каждый стек должен иметь уникальное имя). Но переменная недоступна при развертывании стека. Конечно, я мог бы просто определить переменную COMPOSE_PROJECT_NAME
самостоятельно в a .env-файл, но я надеялся, что в docker есть какие-либо переменные среды по умолчанию.
Ответ №1:
Вы можете использовать переменные среды для передачи строк в файл настройки. Существует множество способов использования документации docker. Например:
Вы можете задать значения по умолчанию для любых переменных среды, на которые ссылается файл создания или которые используются для настройки создания, в файле среды с именем .env. Путь к файлу .env выглядит следующим образом:
- Начиная с 1.1.8, файл.env помещается в базу каталога проекта
- Каталог проекта может быть явно определен с помощью параметра —file или переменной среды COMPOSE_FILE. В противном случае это текущий рабочий каталог, в котором выполняется команда docker compose ( 1.28).
- В предыдущих версиях могли возникнуть проблемы с разрешением файла .env с помощью —file или COMPOSE_FILE. Чтобы обойти это, рекомендуется использовать —project-directory, который переопределяет путь к файлу .env. Это несоответствие устранено в версии v1.28 путем ограничения пути к файлу каталогом проекта.
Комментарии:
1. Извините, я думаю, что мое описание было недостаточно ясным. Я знаю о механизме .env-файла.
2. Вы протестировали все решения в документации docker и не сработали? даже
--env-file
вариант?3. Извините, нажимаю быстро на ввод. Я обновил свое описание выше, чтобы (надеюсь) сделать его более понятным, чего я пытаюсь достичь. Да, я тестирую несколько переменных среды, таких как
COMPOSE_PROJECT_NAME
иCOMPOSE_FILE
т. Д. Но я думаю, что есть только возможность настроить поведение docker-compose, и по умолчанию они недоступны для интерполяции среды (кроме того, я определяю их сам).