¿Es posible pasar variables de entorno personalizadas al contenedor de Docker?

Algunas bibliotecas de cliente, como GitHub - googleapis/google-auth-library-ruby: Google Auth Library for Ruby · GitHub, requieren que las credenciales de autenticación se establezcan como variables de entorno. ¿Es posible pasarlas a través del archivo yml?

Intenté lo siguiente:

  1. Agregar export VAR=VALUE a la sección de comandos personalizados del archivo yml.
  2. Agregar VARIABLE: VALUE a la sección env del archivo yml.

@merefield me señaló que de hecho es posible.

En la sección de comandos personalizados, haz lo siguiente:

# agrega la variable al archivo .bashrc
exec: echo 'export VAR=value' >> ~/.bashrc
...
# recarga el archivo
exec: source ~/.bashrc

Puedo confirmar que este enfoque realmente funciona. :slight_smile:

p.d.
De alguna manera, el source ~/.bashrc no actualiza el entorno. Quizás se está llamando demasiado pronto.

También probé:
- exec: /bin/bash -c "source ~/.bashrc"

¿No puedes usar la sección env: de la definición del contenedor para esto? Eso debería crear una variable de entorno a la que la aplicación de Rails pueda acceder.

Así:

env:
  CUSTOM_ENV: "value"

De lo contrario, parece que pups ya inyecta variables de entorno del host, también.

Eso me da un error relacionado con Docker. Sería muy intuitivo si funcionara así. :slight_smile: O estoy loco. Creo que hay una regla para aceptar variables personalizadas que comiencen con DISCOURSE_.

Intentaré lo de la variable de entorno una vez más cuando llegue a mi escritorio mañana.

Bueno, estaba loco. Esto funciona perfectamente. El problema se debía a un valor multilínea. Lo eliminé y la compilación tuvo éxito. Pero la pregunta es: ¿cómo se utilizan los valores multilínea?

¡Yuhoo! Logré que funcionara. El problema era que estaba usando una clave privada RSA como variable de entorno. Esto es lo que hay que hacer para que funcione:

Envuelve tu clave entre comillas simples '' y añade una barra invertida extra \ antes de cada \n que aparezca en la clave. Es decir, \n se convertiría en \\n.

Solo para que lo sepas, hay formas más fáciles de hacer eso que actualizar todos los \n directamente.

Algo así:

key: |
  ---BEGIN SECRET KEY---
  SHH no leas esto es secreto
  ---END SECRET KEY---

¿Te refieres a pegar la parte central de la clave tal cual? Eso sería un poco más limpio.

Quiero decir que YAML admite líneas múltiples comenzando con el carácter | (y variaciones opcionales)

Luego puedes pegar la clave tal cual, sin modificaciones (excepto los espacios al inicio).

Probé algo absurdo: agregué | y un salto de línea real en lugar de cada \n, pero no funcionó.