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

811
Vistas
Pasar un archivo JSON como variable de entorno en Docker

Me gustaría pasar el contenido de un archivo JSON como una variable de entorno durante la ejecución de la ventana acoplable. La ejecución de la ventana acoplable se inicializa dentro de un archivo de servicio systemd.

Hice algo como:

 export TEMP_CONFIG=$(cat /etc/config.json)

y ejecute el contenedor docker de la siguiente manera:

 docker run \ --env SERVICE_NAME=${CONTAINER_NAME} \ --env TEMP_CONFIG \

Pero cuando estoy dentro del contenedor docker e intento hacer eco de la variable ${TEMP_CONFIG} Está vacío.

 root@ip-10-109-7-77:/usr/local/nginx/conf# echo ${TEMP_CONFIG} root@ip-10-109-7-77:/usr/local/nginx/conf#

¿Hay alguna forma de pasar el contenido de un archivo JSON como variable de entorno?

POR CIERTO:

 --env TEMP_CONFIG=$(cat /etc/config.json) \

Hacer lo anterior arroja una excepción:

 docker: Error parsing reference: "\"conf\"" is not a valid repository/tag.

El contenido de config.json es:

 { "conf" : { "appname" : { "dbhost" : "xxxx", "dbname" : "dbname", "dbuser" : "user", "dbpassword" : "xxxxx", "hostname" : "xxxxxx" }, "cacheBaseDir" : "/storage/", "iccprofile" : "/etc/nginx/RGB.V1.0.icc", "tmpDir" : "/tmp", "mdb" : { "user" : "user", "password" : "xxxxx", "rights" : "GlobalAdministrator", "company" : "somecompany" } } }

Cualquier ayuda es definitivamente apreciada.

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

0

respuesta actualizada

Mencionó que usa el comando docker run en un archivo de unidad systemd. Las opciones systemd ExecStart no se inician en un shell. La sustitución de variables de entorno es compatible con el nombre. También vea la documentación sobre esto:

Se admite la sustitución de variables de entorno básico. Use " ${FOO} " como parte de una palabra, o como una palabra propia, en la línea de comando, en cuyo caso será reemplazada por el valor de la variable de entorno, incluidos todos los espacios en blanco que contiene, lo que dará como resultado una sola argumento.

El documento también dice que StartExec no se ejecuta en un shell:

Esta sintaxis pretende ser muy similar a la sintaxis de shell, pero solo se entienden los metacaracteres y las expansiones que se describen en los siguientes párrafos. Específicamente, no se admite la redirección mediante "<", "<<", ">" y ">>", canalizaciones mediante "|", ejecutar programas en segundo plano mediante "&" y otros elementos de la sintaxis de shell. [...] Tenga en cuenta que las líneas de comando de shell no son compatibles directamente.

Sin embargo, puede usar ExecStart para iniciar un shell y luego pasar un comando usando el indicador -c (aún necesita citar la variable como se menciona en mi respuesta original a continuación):

 ExecStart=/bin/bash -c "docker run -e \"TEMP_CONFIG=$(</etc/config.json)\" ..."

respuesta original

Su cadena JSON contiene espacios, y sin citar su shell interpretará todo después del primer espacio como argumentos posteriores. Entonces TEMP_CONFIG=$(cat /etc/config.json) es esencialmente equivalente a:

 --env TEMP_CONFIG={ "conf" : { "...

En este caso, la variable ambiental TEMP_CONFIG tendrá el valor { , y docker run asumirá que "conf" es el siguiente argumento (en este caso, el nombre de la imagen).

Solución: cite sus variables bash:

 --env "TEMP_CONFIG=$(cat /etc/config.json)"

Además, no uses cat cuando no tengas que hacerlo:

 --env "TEMP_CONFIG=$(</etc/config.json)"
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