Obtener variable de entorno del contenedor Docker

Resuelto Citronen asked hace 9 años • 12 respuestas

¿Cuál es la forma más sencilla de obtener una variable de entorno de un contenedor acoplable que no se ha declarado en Dockerfile ?

Por ejemplo, ¿una variable de entorno que se ha configurado a través de alguna docker exec container /bin/bashsesión?

Puedo hacerlo docker exec container env | grep ENV_VAR, pero preferiría algo que simplemente devuelva el valor.

Intenté 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.

Citronen avatar Dec 03 '15 02:12 Citronen
Aceptado

Para ver todas las variables ambientales:

docker exec container env

Para conseguir uno:

docker exec container env | grep VARIABLE | cut -d'=' -f2
aisbaa avatar Dec 02 '2015 19:12 aisbaa

La forma correcta de ejecutar echo "$ENV_VAR"dentro del contenedor para que la sustitución de variables ocurra en el contenedor es:

docker exec <container_id> bash -c 'echo "$ENV_VAR"'
jwodder avatar Dec 02 '2015 20:12 jwodder

Puedes usar printenv VARIABLEen lugar de /bin/bash -c 'echo $VARIABLE. Es mucho más simple y no realiza sustitución:

docker exec container printenv VARIABLE
gentooboontoo avatar Dec 08 '2015 17:12 gentooboontoo

La desventaja de usarlo docker execes que requiere un contenedor en ejecución , por lo que docker inspect -fpuede resultar útil si no está seguro de que se esté ejecutando un contenedor.

Ejemplo 1. Genere una lista de variables de entorno separadas por espacios en el contenedor especificado:

docker inspect -f \
   '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name

la salida se verá así:

ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3

Ejemplo #2. Genere cada var env en una nueva línea y greplos elementos necesarios; por ejemplo, la configuración del contenedor mysql se podría recuperar de esta manera:

docker inspect -f \
    '{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \
    container_name | grep MYSQL_

generará:

MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=supersecret
MYSQL_USER=demo
MYSQL_DATABASE=demodb
MYSQL_MAJOR=5.5
MYSQL_VERSION=5.5.52

Ejemplo #3. Modifiquemos el ejemplo anterior para obtener una salida compatible con bash que pueda usarse directamente en sus scripts:

docker inspect -f \
   '{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \
   container_name | grep MYSQL

generará:

export MYSQL_PASSWORD=secret
export MYSQL_ROOT_PASSWORD=supersecret
export MYSQL_USER=demo
export MYSQL_DATABASE=demodb
export MYSQL_MAJOR=5.5
export MYSQL_VERSION=5.5.52

Si desea profundizar más, vaya a la documentación del paquete de texto/plantilla de Go con todos los detalles del formato.

Sergiy Sokolenko avatar Oct 12 '2016 07:10 Sergiy Sokolenko