Estoy construyendo un contenedor para una aplicación de rubí. La configuración de mi aplicación está contenida en variables de entorno (cargadas dentro de la aplicación con dotenv ).
Una de esas variables de configuración es la ip pública de la aplicación, que se usa internamente para crear enlaces. Necesito agregar una entrada dnsmasq que apunte esta ip a 127.0.0.1 dentro del contenedor, para que pueda obtener los enlaces de la aplicación como si no estuviera en contenedor.
Por lo tanto, estoy tratando de establecer un ENV
archivo en mi Docker que pasaría una variable de entorno al contenedor.
Intenté algunas cosas.
ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
Sin embargo, todo pasa la cadena "REQUEST_DOMAIN" en lugar del valor de la variable de entorno. ¿Hay alguna manera de pasar valores de variables de entorno de la máquina host al contenedor?
Your image will not build if you have referenced an ARG in your Dockerfile but excluded it in --build-arg
Está usted equivocado. Puede crear imágenes con referencias incluso sin --build-arg. Además, puede establecer el valor predeterminado para la construcción arg.Entonces puedes hacer:
cat Dockerfile | envsubst | docker build -t my-target -
Luego tenga un Dockerfile con algo como:
Supongo que podría haber un problema con algunos caracteres especiales, pero esto funciona para la mayoría de los casos al menos.
fuente
envsubst
como parte debrew install gettext
. Pero debido a posibles conflictos con el sistema de compilación BSD, es "solo de barril" y no se crean symlnks. Sin embargo, es seguro hacer esoln -s /usr/local/Cellar/gettext/*/bin/envsubst /usr/local/bin/
para agregar ese comando a su RUTA. (Realmente son las libs lo que preocupa.) O puede usarlo en su/usr/local/Cellar/gettext/*/bin/envsubst
ubicacióndocker build -
es, específicamente, lo que no funciona cuando hace referencia a rutas relativas desde su Dockerfile, independientemente de la sustitución de var.docker build
su lugar. Ejemplo:cat Dockerfile | envsubst > DockerfileWithEnvVars
entoncesdocker build -t my-target -f DockerfileWithEnvVars .
, entoncesrm DockerfileWithEnvVars
envsubst < Dockerfile | sponge Dockerfile
Una alternativa para usar
envsubst
sin perder la capacidad de usar comandos comoCOPY
oADD
, y sin usar archivos intermedios sería usar la sustitución de proceso de Bash :fuente
unable to prepare context: the Dockerfile (/dev/fd/63) must be within the build context
Cargue variables de entorno de un archivo que cree en tiempo de ejecución.
... luego en el Dockerfile
donde test.sh carga MYVAR desde env.sh
fuente
Si solo desea buscar y reemplazar todas las variables de entorno ($ ExampleEnvVar) en un Dockerfile, compílelo, esto funcionaría:
envsubst < /path/to/Dockerfile | docker build -t myDockerImage . -f -
fuente
envsubst < ./Dockerfile | docker build -squash -t ${DOCKIMG}:${VERSION} . -f -
dónde laFROM
línea usa la variable de entorno.agregue
-e
clave para pasar variables de entorno al contenedor. ejemplo:fuente