¿Cómo paso variables de entorno a contenedores Docker?
¿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
Puede pasar variables de entorno a sus contenedores con la -e
bandera.
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., -e
puede 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 #
Puede pasar usando -e
pará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 run
lo --env-file
que 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.