web-dev-qa-db-fra.com

Pouvons-nous transmettre les variables ENV via la ligne de commande lors de la création d’une image de menu fixe via le fichier docker?

Je travaille sur une tâche qui implique la création d'une image de menu fixe avec centOs comme base à l'aide d'un fichier docker. L'une des étapes à l'intérieur du fichier de docker a besoin de http_proxy et https_proxy Les variables ENV doivent être définies pour pouvoir fonctionner derrière le proxy.

Comme ce fichier Dockerfile sera utilisé par plusieurs équipes ayant différents mandataires, je souhaite éviter de devoir modifier le fichier Dockerfile pour chaque équipe. Au lieu de cela, je recherche une solution qui me permette de passer des variables ENV au moment de la construction, par exemple:

Sudo docker build -e http_proxy = une valeur.

Je ne sais pas s'il existe déjà une option offrant cela. Est-ce que je manque quelque chose?

58
Aniketh

Les conteneurs peuvent être construits en utilisant build arguments (dans Docker 1.9+) qui fonctionnent comme des variables d’environnement.

Voici la méthode:

FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV ${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini

puis construisez un conteneur de production:

docker build --build-arg APP_ENV=prod .

Pour votre problème particulier:

FROM debian
ENV http_proxy ${http_proxy}

puis lancez:

docker build --build-arg http_proxy=10.11.24.31 .

Notez que si vous construisez vos conteneurs avec docker-compose, vous pouvez spécifiez ces build-arguments dans le docker-compose.yml fichier , mais pas sur la ligne de commande. Cependant, vous pouvez utiliser substitution de variable dans le docker-compose.yml fichier, qui utilise des variables d’environnement .

95
Sin30

J'ai fait face à la même situation.

Selon la réponse de Sin30, la jolie solution consiste à utiliser Shell,

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
1
Tugrul