Comment puis-je utiliser une variable à l'intérieur d'un Dockerfile CMD?
À l'intérieur de mon Dockerfile:
ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]
Erreur:
CommandError: '$PROJECTNAME' is not a valid project name
Quelle est la meilleure solution de contournement? Ne Docker ont tout plan visant à "corriger" ou introduire cette fonctionnalité dans les versions ultérieures de Docker?
REMARQUE: Si je supprime la ligne de CMD à partir du Panneau de fichier, puis exécutez le conteneur Docker, je suis en mesure d'exécuter manuellement Django-admin startproject $PROJECTNAME à partir de l'intérieur du conteneur et il va créer le projet...
Comment et quand êtes-vous à la définition de
Au début de mon Dockerfile à l'aide de l'ENV. Aussi j'ai oublié de mentionner que si je supprime la ligne de CMD à partir de la Dockerfile, puis exécutez le conteneur, à partir de l'intérieur du conteneur, je peux exécuter cette commande et il va créer le projet (le sens de l'ENV de variable est valide).
Ce type de variable voulez-vous dire: dockerfile variable ou variable d'environnement (comme dans votre système d'exécution)?
J'ai mis à jour l'OP
$PROJECTNAME
?Au début de mon Dockerfile à l'aide de l'ENV. Aussi j'ai oublié de mentionner que si je supprime la ligne de CMD à partir de la Dockerfile, puis exécutez le conteneur, à partir de l'intérieur du conteneur, je peux exécuter cette commande et il va créer le projet (le sens de l'ENV de variable est valide).
Ce type de variable voulez-vous dire: dockerfile variable ou variable d'environnement (comme dans votre système d'exécution)?
J'ai mis à jour l'OP
OriginalL'auteur david | 2016-11-06
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez une liste d'exécution, comme dans...
...puis Docker va exécuter la commande directement, sans impliquer un shell. Depuis il n'y a pas de shell impliqués, ce qui signifie:
>
,<
,|
, etccommand1; command2
Si vous voulez que votre
CMD
pour développer des variables, vous devez vous organiser pour une coquille. Vous pouvez le faire comme ceci:Ou vous pouvez utiliser une simple chaîne de caractères au lieu d'une liste d'exécution, ce qui vous obtient un résultat sensiblement identique à l'exemple précédent:
Il y a des virgules manquantes après la "c".
Merci, fixe.
OriginalL'auteur larsks
Permet de dire que vous voulez commencer un processus java à l'intérieur d'un conteneur:
Exemple Dockerfile extrait:
Exemple point d'entrée.sh extrait:
OriginalL'auteur Flavio Aiello