Quel est le moyen le plus simple d'obtenir une variable d'environnement à partir d'un conteneur Docker qui n'a pas été déclaré dans le Dockerfile ?
Par exemple, une variable d'environnement qui a été définie via une docker exec container /bin/bash
session?
Je peux le faire docker exec container env | grep ENV_VAR
, mais je préférerais quelque chose qui renvoie simplement la valeur.
J'ai essayé d'utiliser docker exec container echo "$ENV_VAR"
, mais la substitution semble se produire en dehors du conteneur, donc je n'obtiens pas le var env du conteneur, mais plutôt le var env de mon propre ordinateur.
Merci.
bash
docker
environment-variables
Citronen
la source
la source
Réponses:
La bonne façon de s'exécuter
echo "$ENV_VAR"
à l'intérieur du conteneur afin que la substitution de variable se produise dans le conteneur est:la source
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
mot tel que les gens comprennent qu'il est une variablePour afficher toutes les variables d'environnement:
Pour en obtenir un:
la source
docker exec container env
etdocker exec -it container /bin/bash
puisenv
cracher des choses différentes. Pourquoi?docker inspect container
.docker inspect container
semble avoir la même limitation. Si je crée une variable d'environnement après avoir exécuté le conteneur, elle n'apparaît pas dans un appel àdocker inspect
(dans la section env).bash
commande, par exemplealpine-node
. Donc utiliserexec container bash -c "echo $ENV_VAR"
ne fonctionne pas. Utiliser desexec container env
œuvres pour mon cas. L'utilisationexec container printenv
fonctionne également.Vous pouvez utiliser à la
printenv VARIABLE
place de/bin/bash -c 'echo $VARIABLE
. C'est beaucoup plus simple et cela n'effectue pas de substitution:la source
printenv
pour imprimer toutes les variables.L'inconvénient de l'utilisation
docker exec
est qu'elle nécessite un conteneur en cours d'exécution , elledocker inspect -f
peut donc être pratique si vous n'êtes pas sûr qu'un conteneur est en cours d'exécution.Exemple 1. Génère une liste de variables d'environnement séparées par des espaces dans le conteneur spécifié:
la sortie ressemblera à ceci:
Exemple n ° 2. Sortez chaque variable d'environnement sur une nouvelle ligne et
grep
les éléments nécessaires, par exemple, les paramètres du conteneur mysql pourraient être récupérés comme ceci:affichera:
Exemple n ° 3. Modifions l'exemple ci-dessus pour obtenir une sortie conviviale bash qui peut être directement utilisée dans vos scripts:
affichera:
Si vous souhaitez approfondir, accédez à la documentation du package texte / modèle de Go avec tous les détails du format.
la source
docker exec
toujours dit que mon conteneur ne sait pas.Aucune des réponses ci-dessus ne vous montre comment extraire une variable d'un conteneur non en cours d'exécution (si vous utilisez l'
echo
approche avecrun
, vous n'obtiendrez aucune sortie).Simplement
run
avecprintenv
, comme ça:(Notez qu'au
docker-compose
lieu dedocker
fonctionne aussi)la source
printenv
pour imprimer toutes les variables.Si par hasard vous utilisez VSCode et avez installé l' extension docker , juste right+ clicksur le docker que vous voulez vérifier (dans l' extension docker ), clicksur Inspect , et là, recherchez env , vous trouverez toutes vos valeurs de variables d'env.
la source
La réponse de @ aisbaa fonctionne si vous ne vous souciez pas du moment où la variable d'environnement a été déclarée. Si vous voulez la variable d'environnement, même si elle a été déclarée à l'intérieur d'une
exec /bin/bash
session, utilisez quelque chose comme:Ce n'est pas très joli, mais cela fait le travail.
Pour ensuite obtenir la valeur, utilisez:
la source
Cette commande inspecte l'environnement des processus de la pile docker dans l'hôte:
la source
Nous pouvons modifier
entrypoint
un conteneur non en cours d'exécution avec ladocker run
commande.Exemple de variable d'environnement show PATH:
using
bash
andecho
: Cette réponse prétend qu'ilecho
ne produira aucune sortie, ce qui est incorrect.en utilisant
printenv
la source