Доступность переменных среды внутри файла compose обеспечивается следующим образом:
чувствует себя непоследовательным. Переменные среды со значениями по умолчанию недоступны внутри 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
См. Страницу значений неоднозначности: 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-compose...
Ничего не работает - DOCKER_TAG недоступен. Кто-нибудь знает, что я делаю не так?
Самый полезный комментарий
См. Страницу значений неоднозначности: https://docs.docker.com/compose/environment-variables/
Короче говоря, запись
environment
в вашем файле compose объявляет переменные среды, которые будут доступны внутри вашего контейнера / службы во время выполнения. С другой стороны, подстановка переменных выполняется с использованием переменных, присутствующих на хосте, на котором выполняетсяdocker-compose
. Это два разных набора, и они должны оставаться отдельными.