Compose: Переменные среды со значениями по умолчанию недоступны внутри compose

Созданный на 13 февр. 2017  ·  3Комментарии  ·  Источник: docker/compose

Проблема

Доступность переменных среды внутри файла compose обеспечивается следующим образом:

  • файл оболочки или .env
  • определено в файле компоновки

чувствует себя непоследовательным. Переменные среды со значениями по умолчанию недоступны внутри compose, если явно не предоставлены извне.

Пример

Рассмотрим следующий минимальный файл компоновки:

version: '3'
services:
    example:
        environment:
            TAG: edge
        image: alpine:${TAG}

Переменная ${TAG} недоступна _ где-либо_ внутри файла компоновки.

Например:

$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...

Но:

$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...

$ TAG теперь доступен внутри файла создания.

Результат

Необходимо всегда явно указывать значения переменных env, чтобы иметь возможность использовать их внутри файла композиции.

Кажется естественным ожидать, что все переменные env доступны / разрешаются внутри файла compose, особенно те, которые были определены им в первую очередь. Хотя, похоже, это не так.

Извините, если на этот вопрос был дан ответ раньше, я не нашел этот конкретный вариант использования в списке проблем.

Технические характеристики:

$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: true
$ docker-compose version
docker-compose version 1.11.1, build 7c5d5e4
docker-py version: 2.0.2
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016
kinquestion

Самый полезный комментарий

См. Страницу значений неоднозначности: https://docs.docker.com/compose/environment-variables/

Короче говоря, запись environment в вашем файле compose объявляет переменные среды, которые будут доступны внутри вашего контейнера / службы во время выполнения. С другой стороны, подстановка переменных выполняется с использованием переменных, присутствующих на хосте, на котором выполняется docker-compose . Это два разных набора, и они должны оставаться отдельными.

Все 3 Комментарий

См. Страницу значений неоднозначности: https://docs.docker.com/compose/environment-variables/

Короче говоря, запись environment в вашем файле compose объявляет переменные среды, которые будут доступны внутри вашего контейнера / службы во время выполнения. С другой стороны, подстановка переменных выполняется с использованием переменных, присутствующих на хосте, на котором выполняется docker-compose . Это два разных набора, и они должны оставаться отдельными.

Спасибо за разъяснения!

Я столкнулся с той же проблемой, но не могу ее исправить. У меня есть сценарий оболочки, который обертывает вызов docker-compose:

...
docker-compose $DOCKER_COMPOSE_FILES up $@
...

DOCKER_COMPOSE_FILES - это строка с "-f file1.yml -f file2.yml ...". Все работает нормально.

Моя запись изображения для создания докеров такова:

...
image: "...-service:${DOCKER_TAG}"
...

Я пробовал несколько способов:

  • поиск файла с помощью DOCKER_TAG внутри сценария оболочки
  • экспорт DOCKER_TAG вручную в сценарии оболочки
  • Вызовите docker-compose с DOCKER_TAG впереди:
    DOCKER_TAG=... docker-compose...

Ничего не работает - DOCKER_TAG недоступен. Кто-нибудь знает, что я делаю не так?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги