web-dev-qa-db-fra.com

Utiliser des variables d'environnement dans CMD

Puis-je utiliser des variables d'environnement dans ma section CMD dans un fichier Docker?

Je veux faire quelque chose comme ça:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

Où $ MEMCACHE_11211_TCP_ * serait défini automatiquement par l'inclusion du paramètre --link de my docker run commande. Et $ ARG serait configurable par l'utilisateur au moment de l'exécution, peut-être par le paramètre "-e"?

Cela ne semble pas fonctionner pour moi, il semble littéralement passer par la chaîne "$ ARG" par exemple.

71
brooks94

Cette réponse peut être un peu tardive. Mais l'environnement pour CMD est interprété légèrement différemment selon la façon dont vous écrivez les arguments. Si vous transmettez le CMD en tant que chaîne (pas à l'intérieur d'un tableau), il sera lancé en tant que shell au lieu de exec. Voir https://docs.docker.com/engine/reference/builder/#cmd .

Vous pouvez essayer le CMD sans la syntaxe de tableau pour s’exécuter en tant que shell:

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT
46
Andy Shinn
CMD ["sh", "-c", "echo ${MY_HOME}"]

Réponse de sffits ici .

21
Alex Punnen

Les deux Andys avaient raison. La syntaxe json contourne le point d’entrée. Lorsque vous utilisez CMD comme dans leur exemple, il est considéré comme un argument du point d’entrée par défaut: /bin/sh -c qui interprétera les variables d’environnement.

Docker n'évalue pas les variables dans CMD dans les deux cas. Dans le premier cas, la commande est directement appelée afin que rien ne soit interprété, dans le dernier cas, les variables sont interprétées par sh.

11
creack

Je ne peux pas dire comment cela fonctionne supposé, mais je pense que si vous appelez cela comme un script Shell, par exemple. CMD runmyserver.sh, l'interprétation des variables du shell serait alors différée jusqu'à l'exécution effective du CMD.

Alors, essaie

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

en tant que script shell?

7
Andy