No meu Dockerfile , gostaria de definir variáveis que eu possa usar posteriormente no Dockerfile .
Estou ciente da ENV
instrução, mas não quero que essas variáveis sejam variáveis de ambiente.
Existe uma maneira de declarar variáveis no escopo do Dockerfile ?
variables
docker
dockerfile
Maxime
fonte
fonte
Respostas:
Você pode usar
ARG
- consulte https://docs.docker.com/engine/reference/builder/#argfonte
Que eu saiba, apenas
ENV
permite que, conforme mencionado em " Substituição do ambiente "Eles precisam ser variáveis de ambiente para serem redeclarados em cada novo contêiner criado para cada linha do Dockerfile
docker build
.Em outras palavras, essas variáveis não são interpretadas diretamente em um Dockerfile, mas em um contêiner criado para uma linha Dockerfile, daí o uso da variável de ambiente.
Neste dia, eu uso os dois
ARG
( docker 1.10+ edocker build --build-arg var=value
) eENV
.Usar
ARG
sozinho significa que sua variável é visível no tempo de construção, não no tempo de execução.Meu Dockerfile geralmente possui:
No seu caso,
ARG
basta: eu o uso normalmente para definir a variável http_proxy, para que a construção do docker precise acessar a Internet no momento da construção.fonte
Para responder sua pergunta:
Você pode definir uma variável com:
Espaços em torno do caractere igual não são permitidos.
E use-o mais tarde com:
fonte
Se a variável for reutilizada dentro da mesma
RUN
instrução, pode-se simplesmente definir uma variável shell. Eu realmente gosto de como eles abordaram isso com o Ruby Dockerfile oficial .fonte
RUN foo=$(date) && echo $foo
Você pode usar
ARG variable defaultValue
e, durante o comando executar, pode atualizar esse valor usando--build-arg variable=value
. Para usar essas variáveis no arquivo docker, você pode consultá-las como$variable
no comando run.Nota: Essas variáveis estariam disponíveis para comandos do Linux
RUN echo $variable
e não persistiriam na imagem.fonte