Não é possível gravar no arquivo / etc / hosts do Dockerfile com RUN

9

Estou criando uma imagem do docker usando um Dockerfile bastante simples. Dentro do Dockerfile, tenho este comando:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

O comando em si parece estar OK, pois a criação da imagem não pára neste momento.

O problema é o seguinte: Ao executar a imagem, a linha que deveria ter sido inserida dentro de "/ etc / hosts" não está lá.

Agora, pesquisei e descobri que, antes da versão 1.2 do docker, havia um problema com o arquivo hosts dentro dos contêineres. No meu caso, estou usando a versão 1.5, a mais recente a partir deste momento.

Estou esquecendo de algo?

ATUALIZAÇÃO 1:

Parece haver muitos problemas para isso, abertos e fechados, nas páginas do github do docker.

dlyk1988
fonte

Respostas:

12

Isso funciona no docker 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

O truque é adicionar o nome do host na mesma linha que você o usa, caso contrário, o arquivo hosts será redefinido, pois todo comando RUN inicia um novo contêiner intermediário. Por exemplo, isso não funcionará :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost
Jonatan
fonte
1
Obrigado pela compreensão! Embora correto (eu verifiquei) e útil em geral, não é de uso real para mim neste caso. Eu preciso que o arquivo "hosts" seja preenchido quando o contêiner for executado.
dlyk1988
2
+1 para executar comandos na mesma linha
myol 05/04
7

Depois de escrever a atualização para minha pergunta, decidi dar mais uma olhada nos "problemas" abertos no github. Acontece que uma solução alternativa foi implementada:

docker run ... --add-host='server:0.0.0.0' ...

Usando o argumento "--add-host ..." ao iniciar um contêiner, é possível modificar o arquivo de hosts.

dlyk1988
fonte
5
Eu quero ser capaz de fazer isso na compilação embora. A pessoa que está executando o contêiner não deve saber sobre hosts internos. Não faz sentido!
precisa saber é o seguinte
Eu eco @ samsamm777. Gostaria de saber se existe uma boa maneira de fazer isso?
6137 Jonathan
Este é realmente um comportamento muito surpreendente, o que nunca é uma boa ideia nos sistemas de TI.
Torsten Bronger 07/07