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 ENVarchivo 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-argEstá 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
envsubstcomo 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/envsubstubicació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 buildsu lugar. Ejemplo:cat Dockerfile | envsubst > DockerfileWithEnvVarsentoncesdocker build -t my-target -f DockerfileWithEnvVars ., entoncesrm DockerfileWithEnvVarsenvsubst < Dockerfile | sponge DockerfileUna alternativa para usar
envsubstsin perder la capacidad de usar comandos comoCOPYoADD, 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 contextCargue 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 laFROMlínea usa la variable de entorno.agregue
-eclave para pasar variables de entorno al contenedor. ejemplo:fuente