Dockerfile if else condition avec des arguments externes
J'ai dockerfile
FROM centos:7
ENV foo=42
puis-je construire
docker build -t my_docker .
et de l'exécuter.
docker run -it -d my_docker
Est-il possible de passer des arguments en ligne de commande et l'utiliser avec si d'autre dans Dockerfile? Je veux dire quelque chose comme
FROM centos:7
if (my_arg==42)
{ENV=TRUE}
else:
{ENV=FALSE}
et construire avec cet argument.
docker build -t my_docker . --my_arg=42
source d'informationauteur nick_gabpe
Vous devez vous connecter pour publier un commentaire.
Il pourrait ne pas sembler propre, mais vous pouvez avoir votre Dockerfile (conditionnel) comme suit:
et ensuite construire l'image:
docker build -t my_docker . --build-arg arg=45
ou
docker build -t my_docker .
Selon
build
commande la documentationil y a un paramètre appelé--build-arg
https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg
Exemple d'utilisation
docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .
IMO c'est ce dont vous avez besoin 🙂
Suffit d'utiliser la fonction "test" binaire directement pour ce faire. Vous devriez également utiliser la commande noop ":" si vous ne souhaitez pas spécifier une condition de "else", de sorte que le panneau ne s'arrête pas avec un est non nul, la valeur de retour d'erreur.
De certaines raisons, la plupart des réponses ici ne m'aide pas (peut-être que c'est lié à mon image dans le Dockerfile)
Donc j'ai préféré créer un
bash script
dans mon espace de travail combiné avec--build-arg
afin de gérer si l'instruction tandis que le Panneau de construire en vérifiant si l'argument est vide ou n'est pasScript Bash:
Dockerfile:
Docker Construire:
Remarque: il ira à l'autre (false) dans le script bash
Remarque: il ira à la si (vrai)
Edit 1:
Après plusieurs essais j'ai trouvé la suite l'article et ce un
ce qui m'a aidé à comprendre 2 choses:
1) ARG avant à PARTIR de l'extérieur de la construire
2) Le shell par défaut est /bin/sh qui signifie que si le reste est de travailler un peu différente dans le menu fixe construire. par exemple, vous avez seulement besoin d'un "=" au lieu de "==" pour comparer des chaînes de caractères.
De sorte que vous pouvez le faire à l'intérieur de la
Dockerfile
et dans le
docker build
:Si ce que vous voulez est de créer dynamiquement des images, alors vous devriez probablement faire avec un script de compilation.
Docker fournit déjà des Kits de développement logiciel pour de nombreuses langues qui comprennent généralement une accumulation d'appel qui vous permet de fournir une chaîne de caractères arbitraire ou Dockerfile à construire à partir de.
E. g., avec Ruby: