Docker Compose File не может получить переменные .env - PullRequest
0 голосов
/ 06 сентября 2018

Я использую docker-compose для запуска контейнера traefik. Домен этого контейнера должен быть установлен файлом среды, но каждый раз, когда я запускаю эту службу, он говорит:

ВНИМАНИЕ: переменная DOMAIN не установлена. По умолчанию используется пустая строка

Настройка моего композитного файла:

version: '3.5'

networks:
  frontend:
    name: frontend
  backend:
    name: backend

services:
  Traefik:
    image: traefik:latest
    command: --api --docker --acme.email="test@test.de"
    restart: always
    container_name: Traefik
    networks:
      - backend
      - frontend
    env_file: ./env.env
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik/traefik.toml:/traefik.toml
      - ./traefik/acme.json:/acme.json
    ports:
      - "80:80"
      - "443:443"
    labels:
      - "traefik.docker.network=frontend"
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:traefik.${DOMAIN}"
      - "traefik.port=8080"
      - "traefik.protocol=http"

Настройка файла env.env:

DOMAIN=fiture.de

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 06 сентября 2018
    env_file: ./env.env

Файл env.env не загружается для анализа файла компоновки, он загружается для добавления переменных среды в выполняемый контейнер. В момент, когда докер обрабатывает вышеуказанную инструкцию, файл yaml уже загружен, а переменные расширены.

Если вы используете docker-compose для развертывания контейнеров на одном узле, вы можете переименовать файл .env, и docker-compose загрузит переменные из этого файла перед анализом файла compose.

Если вы развертываете с docker stack deploy, вам нужно самостоятельно импортировать переменные окружения в вашу оболочку. Пример выполнения этого в bash выглядит так:

set -a && . ./env.env && set +a && docker stack deploy ...
...