es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Variable de entorno multiline en Docker se procesa de manera diferente en producción.

Tengo un archivo docker-compose.yml similar a este:

some_python_service:
  ...
  CREDENTIALS: ${credentials:?err}
  ...

Y un archivo .env ubicado en el mismo directorio que el docker-compose.yml:

credentials='{
"MYSQL_CONNECTION_STR":"secret_stuff...",
....
"GRAFANA_PASSWORD":"more_secret_stuff..."
}'

Dado que hay un gran número de credenciales, prefiero pasar una sola variable de entorno a some_python_service como un JSON en lugar de cada una de ellas, y luego analizar el JSON a un diccionario passwords = json.loads(os.environ.get("CREDENTIALS"))

Esto funciona muy bien en mi computadora personal (Mac), pero en nuestra máquina de producción (CentOS) la variable de entorno CREDENTIALS es igual a ''{' (que es la primera línea en .env) y genera la excepción raise JSONDecodeError("Expecting value", s, err.value) from None.

Ambas máquinas ejecutan la misma imagen y la misma versión de Docker (la última), pero no el mismo sistema operativo.
¿Hay alguna forma de pasar un JSON multilínea desde un archivo .env a Docker?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de pasar un JSON multilinea desde un archivo .env a Docker. Una forma de hacer esto es eliminando las comillas simples alrededor del JSON en el archivo .env y añadiendo comillas dobles en su lugar. Por ejemplo, el archivo .env se vería así:

    credentials="{
    "MYSQL_CONNECTION_STR":"secret_stuff...",
    ....
    "GRAFANA_PASSWORD":"more_secret_stuff..."
    }"

    Esto aseguraría que todo el JSON se pase como un único valor a la variable de entorno CREDENTIALS en el archivo docker-compose.yml.

    Además, es importante verificar si las variables de entorno de la máquina de producción están configuradas correctamente y si se está utilizando el archivo .env correcto. Si el problema persiste, puede ser útil imprimir el valor de la variable de entorno CREDENTIALS durante la ejecución para depurar el problema.

Comments are closed.