Disponibilidade de variáveis de ambiente dentro do arquivo de composição fornecida a partir do seguinte:
parece inconsistente. Vars de ambiente com valores padrão não estão disponíveis no compose, a menos que sejam explicitamente fornecidos de fora dele.
Considere o seguinte arquivo de composição mínimo:
version: '3'
services:
example:
environment:
TAG: edge
image: alpine:${TAG}
A variável ${TAG}
não está disponível _anywhere_ dentro do arquivo de composição.
Por exemplo:
$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...
Mas:
$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...
o $ TAG agora está disponível dentro do arquivo de composição.
É necessário sempre fornecer explicitamente os valores das variáveis env para poder usá-los dentro do arquivo de composição.
Parece natural esperar que todas as variáveis env estejam disponíveis / resolvendo dentro do arquivo de composição, especialmente aquelas que foram definidas por ele em primeiro lugar. Embora este pareça não ser o caso.
Desculpe se isso foi respondido antes, não encontrei este caso de uso específico na lista de problemas.
$ 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
Consulte a página de desambiguação: https://docs.docker.com/compose/environment-variables/
Resumindo, a entrada environment
em seu arquivo de composição declara as variáveis de ambiente que estarão disponíveis dentro de seu contêiner / serviço em tempo de execução. A substituição de variáveis, por outro lado, é feita usando as variáveis presentes no host onde docker-compose
está sendo executado. Esses são dois conjuntos diferentes e devem permanecer separados.
Obrigado pelo esclarecimento!
Encontrei o mesmo problema agora, mas não consigo consertá-lo. Eu tenho um script de shell que envolve a chamada docker-compose:
...
docker-compose $DOCKER_COMPOSE_FILES up $@
...
DOCKER_COMPOSE_FILES é uma string com "-f file1.yml -f file2.yml ...". Está tudo funcionando bem.
Minha entrada de imagem docker-compose é:
...
image: "...-service:${DOCKER_TAG}"
...
Tentei de várias maneiras:
DOCKER_TAG=... docker-compose...
Nada funciona - DOCKER_TAG não está disponível. Alguém sabe o que estou fazendo de errado?
Comentários muito úteis
Consulte a página de desambiguação: https://docs.docker.com/compose/environment-variables/
Resumindo, a entrada
environment
em seu arquivo de composição declara as variáveis de ambiente que estarão disponíveis dentro de seu contêiner / serviço em tempo de execução. A substituição de variáveis, por outro lado, é feita usando as variáveis presentes no host ondedocker-compose
está sendo executado. Esses são dois conjuntos diferentes e devem permanecer separados.