Compose: Vars de ambiente com valores padrão não estão disponíveis na composição

Criado em 13 fev. 2017  ·  3Comentários  ·  Fonte: docker/compose

O problema

Disponibilidade de variáveis ​​de ambiente dentro do arquivo de composição fornecida a partir do seguinte:

  • arquivo shell ou .env
  • definido no arquivo de composição

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.

O exemplo

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.

O resultado

É 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.

Especificações técnicas:

$ 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

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 onde docker-compose está sendo executado. Esses são dois conjuntos diferentes e devem permanecer separados.

Todos 3 comentários

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:

  • fornecer o arquivo com DOCKER_TAG dentro do script de shell
  • exportar DOCKER_TAG manualmente no script de shell
  • Chame docker-compose com DOCKER_TAG na frente:
    DOCKER_TAG=... docker-compose...

Nada funciona - DOCKER_TAG não está disponível. Alguém sabe o que estou fazendo de errado?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

29e7e280-0d1c-4bba-98fe-f7cd3ca7500a picture 29e7e280-0d1c-4bba-98fe-f7cd3ca7500a  ·  3Comentários

dazorni picture dazorni  ·  3Comentários

CrimsonGlory picture CrimsonGlory  ·  3Comentários

maltefiala picture maltefiala  ·  3Comentários

saulshanabrook picture saulshanabrook  ·  3Comentários