La disponibilidad de las variables de entorno dentro del archivo de composición se proporciona a partir de lo siguiente:
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.
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.
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.
$ 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 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:
DOCKER_TAG=... docker-compose...
Nada funciona: DOCKER_TAG no está disponible. ¿Alguien sabe lo que estoy haciendo mal?
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á ejecutandodocker-compose
. Esos son dos conjuntos diferentes y deben permanecer separados.