Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

611
Vistas
La variable de entorno no va al contenedor desde docker-compose

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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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:

  • docker-compose.yml
 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=bar

Entonces, 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. :)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda