¿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/bashsesió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"'containerque la gente entienda que es una variablePara ver todas las variables env:
Para obtener uno:
fuente
docker exec container envydocker exec -it container /bin/bashy luegoenvescupir cosas diferentes. ¿Por qué?docker inspect container.docker inspect containerParece 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).bashcomando, por ejemploalpine-node. Así que usarexec container bash -c "echo $ENV_VAR"no funciona. Usandoexec container envobras para mi caso. Usarexec container printenvtambién funciona.Puedes usar en
printenv VARIABLElugar de/bin/bash -c 'echo $VARIABLE. Es mucho más simple y no realiza sustitución:fuente
printenvpara imprimir todas las variables.La desventaja de usar
docker execes que requiere un contenedor en ejecución , por lo quedocker inspect -fpuede 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
greplos 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 execSiempre 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
echoenfoque conrun, no obtendrá ningún resultado).Simplemente
runconprintenv, así:(Tenga
docker-composeen cuenta que en lugar dedockerfunciona también)fuente
printenvpara 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/bashsesió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
entrypointun contenedor que no se ejecuta con eldocker runcomando.Ejemplo muestra la variable de entorno PATH:
usando
bashyecho: Esta respuesta afirma queechono producirá ningún resultado, lo cual es incorrecto.utilizando
printenvfuente