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
Autor: Eduardo A. F.
Publicado: 13-06-2021 17:06
Actualizado: 13-06-2021 17:18