Estou construindo um contêiner para um aplicativo ruby. A configuração do meu aplicativo está contida em variáveis de ambiente (carregadas dentro do aplicativo com dotenv ).
Uma dessas variáveis de configuração é o IP público do aplicativo, usado internamente para criar links. Eu preciso adicionar uma entrada dnsmasq apontando esse ip para 127.0.0.1 dentro do contêiner, para que ele possa buscar os links do aplicativo como se não estivesse em contêiner.
Portanto, estou tentando definir um ENV
no meu Dockerfile que passaria uma variável de ambiente para o contêiner.
Eu tentei algumas coisas.
ENV REQUEST_DOMAIN $REQUEST_DOMAIN
ENV REQUEST_DOMAIN `REQUEST_DOMAIN`
Tudo passa a string "REQUEST_DOMAIN" em vez do valor da variável de ambiente. Existe uma maneira de passar valores de variáveis de ambiente da máquina host para o contêiner?
Your image will not build if you have referenced an ARG in your Dockerfile but excluded it in --build-arg
você está errado. Você pode criar imagem com referências mesmo sem --build-arg. Além disso, você pode definir o valor padrão para o argumento de construção.Então você pode fazer:
cat Dockerfile | envsubst | docker build -t my-target -
Em seguida, tenha um Dockerfile com algo como:
Acho que pode haver um problema com alguns caracteres especiais, mas isso funciona para a maioria dos casos, pelo menos.
fonte
envsubst
como partebrew install gettext
. Porém, devido a possíveis conflitos com o sistema de compilação do BSD, é "somente barril" e nenhum symlnks é feito. No entanto, é seguroln -s /usr/local/Cellar/gettext/*/bin/envsubst /usr/local/bin/
adicionar esse comando ao PATH. (É realmente as bibliotecas que são a preocupação.) Ou você pode usá-lo em sua/usr/local/Cellar/gettext/*/bin/envsubst
localizaçãodocker build -
, especificamente, o que não funciona quando você faz referência a caminhos relativos do Dockerfile, independentemente da substituição do env var.docker build
seu lugar. Exemplocat Dockerfile | envsubst > DockerfileWithEnvVars
docker build -t my-target -f DockerfileWithEnvVars .
rm DockerfileWithEnvVars
envsubst < Dockerfile | sponge Dockerfile
Uma alternativa usando
envsubst
sem perder a capacidade de usar comandos comoCOPY
ouADD
e sem usar arquivos intermediários seria usar a Substituição de Processo do Bash :fonte
unable to prepare context: the Dockerfile (/dev/fd/63) must be within the build context
Carregue variáveis de ambiente de um arquivo criado em tempo de execução.
... então no Dockerfile
onde test.sh carrega MYVAR do env.sh
fonte
Se você apenas deseja localizar e substituir todas as variáveis de ambiente ($ ExampleEnvVar) em um Dockerfile, compilá-lo, isso funcionaria:
envsubst < /path/to/Dockerfile | docker build -t myDockerImage . -f -
fonte
envsubst < ./Dockerfile | docker build -squash -t ${DOCKIMG}:${VERSION} . -f -
onde aFROM
linha está usando a variável de ambiente.adicione
-e
chave para passar variáveis de ambiente para o contêiner. exemplo:fonte