Dans mon fichier Docker:
ENV PROJECTNAME mytestwebsite
CMD ["Django-admin", "startproject", "$PROJECTNAME"]
Erreur:
CommandError: '$PROJECTNAME' is not a valid project name
Quelle est la solution la plus rapide ici? Docker a-t-il l'intention de "réparer" ou d'introduire cette fonctionnalité dans les versions ultérieures de Docker?
NOTE: Si je supprime la ligne CMD du fichier Docker puis exécute le conteneur Docker, je peux exécuter manuellement Django-admin startproject $ PROJECTNAME à l'intérieur du conteneur et le projet sera créé ...
Lorsque vous utilisez une liste d'exécution, comme dans ...
CMD ["Django-admin", "startproject", "$PROJECTNAME"]
... alors Docker exécutera la commande donnée directement, sans impliquer de shell. Comme il n'y a pas de Shell impliqué, cela signifie:
>
, <
, |
, etc.command1; command2
Si vous voulez que votre CMD
développe les variables, vous devez vous procurer un shell. Vous pouvez faire ça comme ça:
CMD ["sh", "-c", "Django-admin startproject $PROJECTNAME"]
Ou vous pouvez utiliser une simple chaîne au lieu d'une liste d'exécution, ce qui vous donne un résultat largement identique à l'exemple précédent:
CMD Django-admin startproject $PROJECTNAME
Disons que vous voulez démarrer un processus Java dans un conteneur:
Exemple extrait de Dockerfile:
ENV Java_OPTS -XX +UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm
...
ENTRYPOINT ["/sbin/tini", "--", "entrypoint.sh"]
CMD ["Java", "${Java_OPTS}", "-myargument=true"]
Exemple entrypoint.sh extrait:
#!/bin/sh
...
echo "*** Startup $0 suceeded now starting service using eval to expand CMD variables ***"
exec su-exec mytechuser $(eval echo "$@")
Si vous souhaitez utiliser la valeur dans le Runtime, définissez la valeur ENV dans le fichier Docker, Si vous souhaitez l'utiliser pendant la génération, vous pouvez directement utiliser ARG.
Exemple :
Valeur ARG ENV envValue = $ valeur CMD ["sh", "-c", "Java -jar $ {envValue} .jar"]
Transmettez la valeur dans la commande de construction Docker build -t tagName --build-arg value = "jarName"