Intentaba pasar ENV_VAR a un contenedor, pero no funcionaba.
version: '3.7' services: ubuntu: image: ubuntu:latest environment: - ENV_VAR=teste command: "echo ${ENV_VAR}" El problema se resolvió usando $$ en lugar de $ :
version: '3.7' services: ubuntu: image: ubuntu:latest environment: - ENV_VAR=teste command: '/bin/sh -c "echo $$ENV_VAR"' Pero no entiendo por qué tuve que llamar a sh y no creo que una aplicación en ejecución dentro de mi imagen pueda leer este valor.
Tener una variable en su contenedor en tiempo de ejecución y tener esta variable disponible en el tiempo de inicio en su docker-compose.yml son cosas diferentes. Compose no puede sustituir variables en algún lugar del archivo de configuración con variables de la sección de environment del archivo, lo que está intentando hacer en la parte del command , pero tendría que usar un archivo .env para que esto funcione.
O, como lo hizo, use la sintaxis $$ para evitar que Compose evalúe una variable , pero deje que haga el Shell invocado en el contenedor.
Sin embargo, las variables en la parte del environment están disponibles para el contenedor. Puedes comprobarlo con este ejemplo mínimo:
version: "3.7" services: foo: image: ubuntu container_name: ubuntu environment: - foo=bar command: sleep 3 nico@tuxedo:~/StackOverflow$ docker-compose up -d && docker exec ubuntu /bin/sh -c "env | grep foo" Starting ubuntu ... done foo=barEntonces, su aplicación dentro del contenedor no debería tener problemas para obtener esta variable.
En cuanto a por qué exactamente command: echo $$foo no funciona, no estoy del todo seguro. Creo que si usa echo como ENTRYPOINT (porque no hay otro ENTRYPOINT definido en el Dockerfile ), entonces no hay Shell cuando inicia el contenedor, porque sobrescribe el /bin/bash predeterminado. echo en sí mismo parece ser incapaz de leer variables del entorno cuando no hay Shell "envuelto alrededor de él". Aunque las variables están claramente ahí (verifique esto con commmand: env y docker-compose up ), echo no sabe cómo obtenerlas.
Si alguien tiene una buena explicación para esto, estoy muy feliz de leerlo. :)