Comment définir une variable d'environnement dans l'exécution d'un conteneur docker
Si j'ai un conteneur docker que j'ai commencé un tout à l'arrière, ce qui est la meilleure façon de définir une variable d'environnement dans l'exécution de conteneur? - Je définir une variable d'environnement au début, lorsque j'ai exécuté la commande exécuter.
$ docker run --name my-wordpress -e VIRTUAL_HOST=domain.com --link my-mysql:mysql -d spencercooley/wordpress
mais maintenant qu'il a été en cours depuis un certain temps je veux ajouter un autre VIRTUAL_HOST
à la variable d'environnement. Je ne veux pas supprimer le conteneur et puis tout simplement ré-exécuter avec la variable d'environnement que je veux, parce que j'aurais pour migrer les anciens volumes pour le nouveau conteneur, il a thème de fichiers et téléchargements en elle que je ne veux pas le perdre.
Je voudrais juste changer la valeur de VIRTUAL_HOST
variable d'environnement.
- Il n'est pas possible de modifier les variables d'environnement d'un processus en cours d'exécution à l'exception de l'intérieur de ce processus lui-même. Cela pourrait être (fait pour être) possible en permettant de mettre à jour la variable d'environnement config (via le panneau de mise à jour), puis en redémarrant le conteneur.
Vous devez vous connecter pour publier un commentaire.
Il y a en général deux options, parce que le panneau ne prend pas en charge cette fonctionnalité est maintenant:
Créer votre propre script, qui va agir comme coureur pour votre commande. Par exemple:
Exécuter votre commande de la manière suivante:
docker exec -it CONTAINER_ID /bin/bash -c "export VAR=1 && echo $VAR"
Il sorties vide variable (prévu1
). Ce qui me manque?"... echo $VAR"
, la variable est résolu dans votre environnement de shell, qui dans ce cas est de votre Panneau d'accueil. Vous pouvez prouver cela en essayantecho $HOSTNAME
par exemple, et la valeur sera votre Panneau de l'hôte nom d'hôte. Essayez unique citant cette chaîne de commande pour obtenir l'effet désiré.Docker n'offre pas cette fonctionnalité.
Il y a un problème: "Comment définir un environnement variable sur un conteneur existant? #8838"
Aussi de "Permettre à
panneau de démarrage
prennent les variables d'environnement #7561":volumes-from
?Pour un quelque peu étroit cas d'utilisation, docker question 8838 mentionne ce genre de hack:
Cette solution met à jour les variables d'environnement sans avoir besoin de supprimer et ré-exécutez le conteneur, migrer des volumes et de se souvenir de paramètres à
run
.Cependant, cela nécessite un redémarrage du démon docker. Et, jusqu'à ce question 2658 est adressée, cela inclut un redémarrage de tous les conteneurs.
Tout d'abord, vous pouvez définir env à l'intérieur du conteneur de la même façon que vous le faites sur une machine linux.
Deuxièmement, vous pouvez le faire en modifiant le fichier de configuration de votre conteneur docker (
/var/lib/docker/containers/xxxx/config.v2.json
). Remarque vous devez redémarrer le panneau de service pour prendre effet. De cette façon, vous pouvez modifier d'autres choses comme le mappage de port etc.Vous avez écrit que vous ne voulez pas migrer les anciens volumes. Donc je suppose que le
Dockerfile
que vous avez utilisé pour construire lespencercooley/wordpress
image aVOLUME
s définie ou que vous avez spécifié sur la ligne de commande avec la-v
commutateur.Vous pouvez tout simplement commencer un nouveau conteneur de laquelle les importations, les volumes de l'ancien avec le
--volumes-à partir de
interrupteur comme:De sorte que vous aurez un conteneur neuf, mais vous ne le lâche plus, les anciennes données. Vous n'avez même pas besoin de le toucher ou de le migrer.
Bien faites conteneur est toujours apatrides. Cela signifie que son processus est censé ajouter ou modifier des fichiers sur les volumes. Qui peut être vérifié avec un simple
docker diff <containerId>
après que le conteneur a couru un certain temps.Dans ce cas, il n'est pas dangereux quand vous re-créer le conteneur avec les mêmes paramètres (dans votre cas, légèrement modifiées). En supposant que vous créer à partir d'exactement la même image à partir de laquelle l'ancien a été créé et vous ré-utiliser les mêmes volumes-dessus de l'interrupteur.
Après le nouveau conteneur a démarré avec succès et vous vérifié que tout fonctionne correctement, vous pouvez supprimer l'ancien wordpress conteneur. L'ancien, les volumes sont ensuite transmis à partir du nouveau conteneur et ne seront pas supprimés.
À:
vous pouvez utiliser
option:
Vous pouvez définir une variable d'environnement pour l'exécution d'un conteneur Docker par
docker exec -it -e "your environment Key"="your new value" <container> /bin/bash
Vérifier à l'aide de commande ci-dessous
printenv
Cette mise à jour de votre clé avec la nouvelle valeur fournie.
Note: Cela permet d'obtenir des revenus à la vieille sur si docker obtient redémarré.
voici comment mettre à jour un conteneur docker config en permanence
docker stop <container name>
docker run -it -v /var/lib/docker:/var/lib/docker alpine vi $(docker inspect --format='/var/lib/docker/containers/{{.Id}}/config.v2.json' <container name>)