¿Cuál es la forma más sencilla de obtener una variable de entorno de un contenedor Docker que no ha sido declarado en el Dockerfile ?
Por ejemplo, ¿una variable de entorno que se ha establecido en alguna docker exec container /bin/bash
sesión?
Puedo hacerlo docker exec container env | grep ENV_VAR
, pero preferiría algo que solo devuelva el valor.
He intentado usarlo docker exec container echo "$ENV_VAR"
, pero la sustitución parece ocurrir fuera del contenedor, por lo que no obtengo la var. Env del contenedor, sino la var. Env de mi propia computadora.
Gracias.
bash
docker
environment-variables
Citronen
fuente
fuente
Respuestas:
La forma correcta de ejecutarse
echo "$ENV_VAR"
dentro del contenedor para que la sustitución de variables ocurra en el contenedor es:fuente
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
que la gente entienda que es una variablePara ver todas las variables env:
Para obtener uno:
fuente
docker exec container env
ydocker exec -it container /bin/bash
y luegoenv
escupir cosas diferentes. ¿Por qué?docker inspect container
.docker inspect container
Parece tener la misma limitación. Si creo una variable de entorno después de ejecutar el contenedor, no aparece en una llamada adocker inspect
(en la sección env).bash
comando, por ejemploalpine-node
. Así que usarexec container bash -c "echo $ENV_VAR"
no funciona. Usandoexec container env
obras para mi caso. Usarexec container printenv
también funciona.Puedes usar en
printenv VARIABLE
lugar de/bin/bash -c 'echo $VARIABLE
. Es mucho más simple y no realiza sustitución:fuente
printenv
para imprimir todas las variables.La desventaja de usar
docker exec
es que requiere un contenedor en ejecución , por lo quedocker inspect -f
puede ser útil si no está seguro de que un contenedor se esté ejecutando.Ejemplo 1. Salida de una lista de variables de entorno separadas por espacios en el contenedor especificado:
la salida se verá así:
Ejemplo # 2. Imprima cada variable de entorno en una nueva línea y
grep
los elementos necesarios, por ejemplo, la configuración del contenedor mysql podría recuperarse así:dará salida:
Ejemplo # 3. Modifiquemos el ejemplo anterior para obtener una salida amigable de bash que se pueda usar directamente en sus scripts:
dará salida:
Si desea profundizar más, vaya a la documentación del paquete de texto / plantilla de Go con todos los detalles del formato.
fuente
docker exec
Siempre dije que mi contenedor no se sabe.Ninguna de las respuestas anteriores le muestra cómo extraer una variable de un contenedor que no se está ejecutando (si utiliza el
echo
enfoque conrun
, no obtendrá ningún resultado).Simplemente
run
conprintenv
, así:(Tenga
docker-compose
en cuenta que en lugar dedocker
funciona también)fuente
printenv
para imprimir todas las variables.Si por casualidad usa VSCode y ha instalado la extensión docker , simplemente right+ clicken el docker que desea verificar (dentro de la extensión docker ), clicken Inspeccionar y allí buscar env , encontrará todos sus valores de variables env
fuente
La respuesta de @ aisbaa funciona si no le importa cuándo se declaró la variable de entorno. Si desea la variable de entorno, incluso si se ha declarado dentro de una
exec /bin/bash
sesión, use algo como:No es muy bonito, pero hace el trabajo.
Para obtener el valor, use:
fuente
Este comando inspecciona el entorno de los procesos de Docker stack en el host:
fuente
Podemos modificar
entrypoint
un contenedor que no se ejecuta con eldocker run
comando.Ejemplo muestra la variable de entorno PATH:
usando
bash
yecho
: Esta respuesta afirma queecho
no producirá ningún resultado, lo cual es incorrecto.utilizando
printenv
fuente