Compose: Les variables d'environnement avec les valeurs par défaut ne sont pas disponibles dans composer

Créé le 13 févr. 2017  ·  3Commentaires  ·  Source: docker/compose

Le problème

Disponibilité des variables d'environnement dans le fichier de composition fourni à partir des éléments suivants :

  • shell ou fichier .env
  • défini dans le fichier de composition

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.

L'exemple

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.

Le résultat

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.

Spécifications techniques:

$ 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

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.

Tous les 3 commentaires

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 :

  • sourcer le fichier avec le DOCKER_TAG dans le script shell
  • exporter DOCKER_TAG manuellement dans le script shell
  • Appelez docker-compose avec DOCKER_TAG devant :
    DOCKER_TAG=... docker-compose...

Rien ne fonctionne - DOCKER_TAG n'est pas disponible. Est-ce que quelqu'un sait ce que je fais mal?

Cette page vous a été utile?
0 / 5 - 0 notes