Nuestros programadores estrellas agotaron sus reservas de café, en su búsqueda a tiempo completo por la resolución, hasta que David encontró el resultado en Gogs por lo tanto en este momento la comparte contigo.
Solución:
Deberías usar el ARG
directiva en su Dockerfile que está destinada a este propósito.
Él
ARG
La instrucción define una variable que los usuarios pueden pasar en tiempo de compilación al constructor con el comando de compilación docker usando el--build-arg
bandera.=
Entonces tus Dockerfile tendrá esta línea:
ARG request_domain
o si prefiere un valor predeterminado:
ARG request_domain=127.0.0.1
Ahora puede hacer referencia a esta variable dentro de su Dockerfile:
ENV request_domain=$request_domain
entonces construirás tu contenedor así:
$ docker build --build-arg request_domain=mydomain Dockerfile
Nota 1: Su imagen no se construirá si ha hecho referencia a un ARG
en su Dockerfile pero lo excluyó en --build-arg
.
Nota 2: Si un usuario especifica un argumento de compilación que no se definió en el Dockerfile, la compilación genera una advertencia:
[Warning] Uno o más argumentos de compilación [foo] no fueron consumidos.
Entonces puedes hacer:
cat Dockerfile | envsubst | docker build -t my-target -
Luego tenga un Dockerfile con algo como:
ENV MY_ENV_VAR $MY_ENV_VAR
Supongo que podría haber un problema con algunos caracteres especiales, pero esto funciona al menos en la mayoría de los casos.
Una alternativa usando envsubst
sin perder la capacidad de usar comandos como COPY
o ADD
y sin usar archivos intermedios sería usar la sustitución de procesos de Bash:
docker build -f <(envsubst < Dockerfile) -t my-target .