docker-compose build con archivo de variables de entorno .env y nodo enviroment en docker-compose.yml

La diferencia en la definición de variables en entorno en archivo .env parámetro --env y docker-compose.yml enviroment

Si bien se puede ejecutar un build usando el parámetro --env si se tiene una cantidad considerable de variables quizá lo más conveniente es cargarlas en un archivo externo.

Supongamos que tenemos el siguiente fichero .env

DOCKERHOST=192.168.1.128 ENV_FILE_1="ENV-1" ENV_FILE_2="ENV-2" ENV_FILE_3="ENV-3"

Ejecutamos el comando

docker-compose -f docker-compose.yml --env-file ./docker/.env up -d --build --remove-orphans //esta es la estructura ├── docker │   ├── .env │   ├── kafka │   │   ├── Dockerfile │   └── zookeeper │   ├── Dockerfile ├── docker-compose.yml

Al hacer el build, estas variables estarán disponibles mientras dure la ejecución. Luego dentro del contenedor en ejecución no estarán disponibles.

Es ahí donde interviene el nodo enviroment. Estas variables si permanecen en el contenedor.

docker-compose.yml

services: zookeeper: ... kafka: # ches/kafka depends_on: - zookeeper hostname: kafka container_name: cont-kafka environment: FROM_ENV_1: ${ENV_FILE_1} FROM_ENV_2: ${ENV_FILE_2} ZOOKEEPER_IP: cont-zookeeper ...

Resultado dentro del contenedor

root@kafka:/kafka# env HOSTNAME=kafka TERM=xterm KAFKA_SCALA_VERSION=2.12 ... PATH=/kafka/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KAFKA_VERSION=0.10.2.1 PWD=/kafka JAVA_HOME=/usr/lib/jvm/java-8-oracle JMX_PORT=7203 ZOOKEEPER_IP=cont-zookeeper -> yml SHLVL=1 HOME=/root KAFKA_RELEASE_ARCHIVE=kafka_2.12-0.10.2.1.tgz LESSOPEN=| /usr/bin/lesspipe %s FROM_ENV_1=ENV-1 -> yml FROM_ENV_2=ENV-2 -> yml LESSCLOSE=/usr/bin/lesspipe %s %s JAVA_VER=8 _=/usr/bin/env

Si nos fijamos en ese listado no se encuentra ninguna de las siguientes variables. DOCKERHOST, ENV_FILE_1, ENV_FILE_2, ENV_FILE_3 pero sí el traspaso del valor ENV_FILE_1 y ENV_FILE_2

En conclusión podemos decir que las variables de entorno en tiempo de ejecución nos sirven en el momento del montaje del contenedor pero una vez que está en ejecución desaparecen y si deseamos contar con esos valores hay que configurarlos en enviroment

ejemplo resultado comando env dentro de contenedor
Ejemplo ejecución comando env dentro de contenedor

Autor: Eduardo A. F.
Publicado: 13-06-2021 17:06
Actualizado: 13-06-2021 17:18