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.
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
CMD ["sh", "-c", "echo ${MY_HOME}"]
Réponse de sffits ici .
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
.
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?