Pouvons-nous nous passer des variables d'environnement par le biais de ligne de commande lors de la construction d'un docker de l'image par le biais de dockerfile?
Je suis en train de travailler sur une tâche qui implique la construction d'une image docker avec centOs sa base à l'aide d'un Dockerfile . L'une des étapes à l'intérieur de la dockerfile besoins http_proxy et https_proxy des variables d'environnement à définir afin de travailler derrière le proxy.
Que ce Dockerfile sera utilisé par plusieurs équipes de différents proxies, je veux éviter d'avoir à modifier le Dockerfile pour chaque équipe. Au lieu de cela je suis à la recherche d'une solution qui me permet de passer des variables d'environnement au moment de la construction, par exemple,
sudo docker construire -e http_proxy=somevalue .
Je ne sais pas si il y a déjà une option qui offre ce. Ai-je raté quelque chose?
- quel est le problème avec le passage de ceux au moment de l'exécution? Quelque chose comme
docker run -e http_proxy http://1.2.3.4:3128 -e https_proxy 1.2.3.4:3129
? La doc dedocker run
docs.docker.com/reference/commandline/run - Le problème est que l'une des étapes à l'intérieur de docker fichier met en jeu yum installation échoue si je n'ai pas mis le http/https ENV variables et sans installation je ne peux pas construire l'image .donc docker run ne marche pas aider moi ici .
- J'ai peur, vous aurez à construire des images spécifiques, la seule différence étant que les valeurs de http_proxy(s) ONBUILD peut aider, mais j'ai peur qu'il ne convient pas ici, voir la doc docs.docker.com/reference/builder
- Cela a été discuté ici, github.com/docker/docker/issues/4962 et encore une fois ici, github.com/docker/docker/pull/9176 et fermé, donc pour le moment, il semble que vous n'avez pas de solution
- Merci user2915097 pour vos commentaires .J'ai déjà parcouru le ci-dessus github liens ,j'ai demandé à cette question avec un petit espoir que quelqu'un sur Stackoverflow peut avoir face à cette situation semblable.
- N'hésitez pas à carillon à github.com/docker/docker/pull/9176 pour l'ajouter à vos exigences pour quelque chose comme ça.
Vous devez vous connecter pour publier un commentaire.
Les conteneurs peuvent être construits à l'aide de
build arguments
(dans le Panneau de 1,9+), qui fonctionnent comme des variables d'environnement.Voici la méthode:
et ensuite construire une production conteneur:
docker build --build-arg APP_ENV=prod .
Pour votre problème particulier:
et de lancer:
docker build --build-arg http_proxy=10.11.24.31 .
Notez que si vous construisez vos contenants avec
docker-compose
, vous pouvez spécifier ces arguments dans ledocker-composer.yml
fichier, mais pas sur la ligne de commande. Toutefois, vous pouvez utiliser la substitution de variable dans ledocker-composer.yml
fichier, qui utilise les variables d'environnement.ENV APP_ENV ${APP_ENV}
n'est pas nécessaire. Il suffit d'avoirARG APP_ENV
sans=local
et il saisira construire l'argumentation et de l'utiliser comme n'importe quelle variable définie parENV
ARG
n'est pas persisté comme une variable d'environnement lorsque le support de l'image est couru. À l'aide deENV APP_ENV ${APP_ENV}
assure que la variable d'environnement est toujours disponible lorsque le conteneur est en cours d'exécution.ENV
à partir de la ligne de commande, donc comment le fait d'avoirARG
de l'aide? Vous avez besoinARG
de sorte que vous pouvez passer à un autre via--build-arg
et puis vous avez besoinENV
de le copier sur une variable d'environnement pour être enregistré avec l'image.http_proxy
ethttps_proxy
url au moment de la construction et de fournir des prêts à l'utilisation Dokcer images pour les différentes équipes à l'aide de différents serveurs proxy. Valeur transmise viaARG
devraient être stockées dans un bon fichier de configuration dans l'image, sans la nécessité de prendre de nouveau à partir deENV
sur la création des conteneurs. Normalement vous devriez utiliserENV
pour la configuration qui est destiné à être fixé sur le conteneur de la création, et une combinaison deARG
etENV
pour les paramètres avec des valeurs par défaut qui peut être remplacé sur la création des conteneurs.ARG
ne sera pas disponible au moment de la création des conteneurs.J'ai fait face à la même situation.
Selon Sin30 la réponse de la jolie solution est l'utilisation de shell,