2017-10-16 4 views
0

Pendant la phase de construction de mes images docker, je voudrais définir automatiquement certaines variables d'environnement pour chaque commande "RUN" suivante.Variables d'environnement Docker Ubuntu

Cependant, je voudrais définir ces variables à partir de l'intérieur du docker conatiner, parce que leur réglage dépend de la logique interne. L'utilisation du dockerfile "ENV" commande n'est pas bonne, car cela ne peut pas s'appuyer sur la logique interne. (Elle ne peut pas compter sur une commande exécutée dans le conteneur docker)

Normalement (si ce n'était pas docker), je définirais mon fichier ~/.profile. Cependant, docker ne charge pas ce fichier dans des shells non interactifs.

donc à leur moment, je dois exécuter chaque commande docker RUN avec:

RUN bash -c "source ~/.profile && do_something_here" 

Cependant, ce qui est très fastidieux (et sale) quand je dois répéter chaque fois que je veux exécuter une commande bash . Y at-il un autre fichier "profil" que je peux utiliser à la place.

Répondre

0

J'ai rencontré un problème similaire et je n'ai pas trouvé de solution satisfaisante. Ce que j'ai fait a été de créer un script qui serait source les variables, puis faire l'opération. Je voudrais alors réécrire les commandes RUN dans le Dockerfile pour utiliser ce script à la place. Dans votre cas, si vous devez exécuter plusieurs commandes, vous pouvez créer un wrapper qui charge les variables, exécute la commande donnée en argument et inclut ce script dans l'image du docker.

0

vous pouvez essayer de régler la arg env comme celui-ci ARG my_env ENV my_env=${my_env} dans Dockerfile, et passer le « my_env = prod » en construction-args afin que vous puissiez utiliser le env défini pour les commandes RUN après vous pouvez utiliser également l'option env_file: dans le docker composer le fichier yml en cas de déploiement d'une pile

+0

J'ai explicitement indiqué dans ma question que la logique qui détermine la valeur des variables est exécutée à l'intérieur du conteneur. En tant que tel votre proposition implique que j'ai besoin de changer le dockerfile de l'intérieur du conainer? Je ne pense pas que ce soit possible ... – eshalev

+0

la méthode ci-dessus est possible et je l'ai utilisée, si vous n'avez pas de logique pour définir les variables env une autre méthode si vous avez une logique exécute script dans 'CMD' donc à chaque fois que vous lancez le conteneur, le script est exécuté et env sont définis selon la logique, par exemple pour exécuter une application tomcat faire un script comme #!/bin/ash ou bash votre script logique &&/path/of/tomcat/catalina. sh 'mettre ce script dans CMD – Vignajeth