Utiliser des variables d'environnement dans CMD
Puis-je utiliser des variables d'environnement dans mon CMD strophe dans un Dockerfile?
Je veux faire quelque chose comme ceci:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
Où $MEMCACHE_11211_TCP_* serait réglée automatiquement par l'inclusion de l' --paramètres de la liaison de mon docker run
de commande. Et $ARG serait configurable par l'utilisateur lors de l'exécution, peut-être par le "-e" paramètre?
Cela ne semble pas fonctionner pour moi, il semble être littéralement en passant par la chaîne "$ARG" par exemple.
Vous devez vous connecter pour publier un commentaire.
Cette réponse peut être un peu tard. Mais l'environnement pour
CMD
est interprété de façon légèrement différente en fonction de la façon dont vous écrivez les arguments. Si vous passer leCMD
comme une chaîne de caractères (pas à l'intérieur d'un tableau), il est lancé comme un obus à la place de l'exec. Voir https://docs.docker.com/engine/reference/builder/#cmd.Vous pouvez essayer les
CMD
sans la syntaxe de tableau pour exécuter un shell:Réponse de sffits ici.
Les deux Andys avait raison. La syntaxe json contourne le point d'entrée. Lorsque vous utilisez CMD dans leur exemple, il est considéré comme un argument par défaut du point d'entrée:
/bin/sh -c
qui va interpréter les variables d'environnement.Docker ne pas évaluer les variables dans CMD dans les deux cas. Dans le premier cas, la commande est appelé directement, de sorte que rien n'est interprété, dans le plus tard, les variables sont interprétées par
sh
.Je ne peux pas parler de la manière dont il est censé de travail, mais je pense que si vous avez appelé cela comme un script shell, par exemple,
CMD runmyserver.sh
, puis l'interprétation des variables shell pourrait être différée jusqu'à ce que le CMD réellement exécuté.Donc, essayez de
comme un script shell?