¿Cómo paso variables de entorno a contenedores Docker?

Resuelto AJcodez asked hace 9 años • 21 respuestas

¿Cómo se puede acceder a una base de datos externa desde un contenedor? ¿Es la mejor manera de codificar la cadena de conexión?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string
AJcodez avatar May 28 '15 05:05 AJcodez
Aceptado

Puede pasar variables de entorno a sus contenedores con la -ebandera.

docker run -e xx=yy

Un ejemplo de un script de inicio:

sudo docker run -d -t -i -e REDIS_NAMESPACE='staging' \ 
-e POSTGRES_ENV_POSTGRES_PASSWORD='foo' \
-e POSTGRES_ENV_POSTGRES_USER='bar' \
-e POSTGRES_ENV_DB_NAME='mysite_staging' \
-e POSTGRES_PORT_5432_TCP_ADDR='docker-db-1.hidden.us-east-1.rds.amazonaws.com' \
-e SITE_URL='staging.mysite.com' \
-p 80:80 \
--link redis:redis \  
--name container_name dockerhub_id/image_name

O, si no desea tener el valor en la línea de comando donde se mostrará ps, etc., -epuede obtener el valor del entorno actual si simplemente lo proporciona sin =:

sudo PASSWORD='foo' docker run  [...] -e PASSWORD [...]

Si tiene muchas variables de entorno y especialmente si deben ser secretas, puede usar un archivo env :

$ docker run --env-file ./env.list ubuntu bash

El indicador --env-file toma un nombre de archivo como argumento y espera que cada línea esté en el formato VAR=VAL, imitando el argumento pasado a --env. Las líneas de comentarios solo necesitan tener el prefijo #

errata avatar May 27 '2015 22:05 errata

Puede pasar usando -eparámetros con el docker run ..comando como se menciona aquí y como se menciona en la errata .

Sin embargo, la posible desventaja de este enfoque es que sus credenciales se mostrarán en la lista de procesos donde lo ejecuta.

Para hacerlo más seguro, puede escribir sus credenciales en un archivo de configuración y hacer docker runlo --env-fileque se menciona aquí . Luego podrá controlar el acceso a ese archivo de configuración para que otras personas que tengan acceso a esa máquina no vean sus credenciales.

Sabin avatar May 27 '2015 22:05 Sabin