Disponibilité des variables d'environnement dans le fichier de composition fourni à partir des éléments suivants :
se sent incohérent. Les variables d'environnement avec des valeurs par défaut ne sont pas disponibles dans compose à moins qu'elles ne soient explicitement fournies de l'extérieur.
Considérez le fichier de composition minimal suivant :
version: '3'
services:
example:
environment:
TAG: edge
image: alpine:${TAG}
La variable ${TAG}
n'est pas disponible _n'importe où_ dans le fichier de composition.
Par exemple:
$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...
Mais:
$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...
le $TAG est maintenant disponible dans le fichier de composition.
Il est nécessaire de toujours fournir explicitement les valeurs des variables env pour pouvoir les utiliser dans le fichier de composition.
Il semble naturel de s'attendre à ce que toutes les variables env soient disponibles/résolues dans le fichier de composition, en particulier celles qui ont été définies par celui-ci en premier lieu. Bien que cela semble ne pas être le cas.
Désolé si cela a déjà été répondu, je n'ai pas trouvé ce cas d'utilisation particulier dans la liste des problèmes.
$ 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
Veuillez vous référer à la page de désambiguïsation : https://docs.docker.com/compose/environment-variables/
En bref, l'entrée environment
dans votre fichier de composition déclare les variables d'environnement qui seront disponibles dans votre conteneur/service lors de l'exécution. La substitution de variables, quant à elle, se fait à l'aide des variables présentes sur l'hôte où docker-compose
est en cours d'exécution. Ce sont deux ensembles différents et doivent rester séparés.
Merci pour la clarification!
J'ai rencontré le même problème maintenant mais je ne peux pas le résoudre. J'ai un script shell qui encapsule l'appel docker-compose :
...
docker-compose $DOCKER_COMPOSE_FILES up $@
...
DOCKER_COMPOSE_FILES est une chaîne avec "-f fichier1.yml -f fichier2.yml ...". Tout fonctionne bien.
Mon entrée d'image docker-compose est la suivante :
...
image: "...-service:${DOCKER_TAG}"
...
J'ai essayé plusieurs manières :
DOCKER_TAG=... docker-compose...
Rien ne fonctionne - DOCKER_TAG n'est pas disponible. Est-ce que quelqu'un sait ce que je fais mal?
Commentaire le plus utile
Veuillez vous référer à la page de désambiguïsation : https://docs.docker.com/compose/environment-variables/
En bref, l'entrée
environment
dans votre fichier de composition déclare les variables d'environnement qui seront disponibles dans votre conteneur/service lors de l'exécution. La substitution de variables, quant à elle, se fait à l'aide des variables présentes sur l'hôte oùdocker-compose
est en cours d'exécution. Ce sont deux ensembles différents et doivent rester séparés.