Compose: Las variables de entorno con valores predeterminados no están disponibles dentro de redactar

Creado en 13 feb. 2017  ·  3Comentarios  ·  Fuente: docker/compose

La cuestión

La disponibilidad de las variables de entorno dentro del archivo de composición se proporciona a partir de lo siguiente:

  • archivo shell o .env
  • definido en el archivo de redacción

se siente inconsistente. Las variables de entorno con valores predeterminados no están disponibles dentro de la composición a menos que se proporcionen explícitamente desde fuera.

El ejemplo

Considere el siguiente archivo de composición mínimo:

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

La variable ${TAG} no está disponible en ningún lugar dentro del archivo de redacción.

P.ej:

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

Pero:

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

$ TAG ahora está disponible dentro del archivo de redacción.

El resultado

Se requiere siempre proporcionar explícitamente valores de variable env para poder usarlos dentro del archivo de composición.

Se siente natural esperar que todas las variables env estén disponibles / resolviéndose dentro del archivo de redacción, especialmente aquellas que fueron definidas por él en primer lugar. Aunque este parece no ser el caso.

Lo siento si esto fue respondido antes, no encontré este caso de uso en particular en la lista de problemas.

Especificaciones 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

Comentario más útil

Consulte la página de desambiguación: https://docs.docker.com/compose/environment-variables/

En resumen, la entrada environment en su archivo de redacción declara las variables de entorno que estarán disponibles dentro de su contenedor / servicio en tiempo de ejecución. Por otro lado, la sustitución de variables se realiza utilizando las variables presentes en el host donde se está ejecutando docker-compose . Esos son dos conjuntos diferentes y deben permanecer separados.

Todos 3 comentarios

Consulte la página de desambiguación: https://docs.docker.com/compose/environment-variables/

En resumen, la entrada environment en su archivo de redacción declara las variables de entorno que estarán disponibles dentro de su contenedor / servicio en tiempo de ejecución. Por otro lado, la sustitución de variables se realiza utilizando las variables presentes en el host donde se está ejecutando docker-compose . Esos son dos conjuntos diferentes y deben permanecer separados.

¡Gracias por la aclaración!

Me encontré con el mismo problema ahora, pero no puedo solucionarlo. Tengo un script de shell que está envolviendo la llamada docker-compose:

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

DOCKER_COMPOSE_FILES es una cadena con "-f archivo1.yml -f archivo2.yml ...". Todo está funcionando bien.

Mi entrada de imagen de docker-compose es la siguiente:

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

Intenté de varias formas:

  • obteniendo el archivo con el DOCKER_TAG dentro del script de shell
  • exportar DOCKER_TAG manualmente en el script de shell
  • Llame a docker-compose con DOCKER_TAG al frente:
    DOCKER_TAG=... docker-compose...

Nada funciona: DOCKER_TAG no está disponible. ¿Alguien sabe lo que estoy haciendo mal?

¿Fue útil esta página
0 / 5 - 0 calificaciones