Modificar o arquivo hosts no dockerfile

3

Eu tenho um Dockerfile com instruções RUN para modificar o arquivo / etc / hosts, mas não funciona.

FROM dockerhub.mydomain.com/sometag/java8
MAINTAINER itsme

ADD some-java-app.jar app.jar
ADD hosts tmp/
ENV PATH=/opt/java/bin:$PATH
RUN cat /tmp/hosts >> /etc/hosts
CMD ["java",\
    "-Djava.security.egd=file:/dev/./urandom",\
    "-jar",\
    "/app.jar"]

No arquivo hosts que é copiado para / tmp na imagem do docker, há nomes de host e IPs adicionais. Desejo cat that /tmp/hosts to /etc/hosts mas depois de criar a imagem /etc/hosts não está modificada.

Como modificar este arquivo corretamente? EDITAR: Estou tentando usar o comando tee , mas enquanto a imagem é construída, o conteúdo de /tmp/hosts é ecoado para o console, não para /etc/hosts .

RUN bash -c 'cat /tmp/hosts | tee -a /etc/hosts'

Parece que | ou >> não funciona no Dockerfile.

    
por QkiZ 19.05.2016 / 11:23

2 respostas

4

O Docker cria o arquivo /etc/hosts enquanto o contêiner é iniciado. É por isso que minhas modificações do arquivo /etc/hosts são sobrescritas. Eu posso mudar o arquivo de hosts dinamicamente, via comando CMD.

FROM dockerhub.mydomain.com/sometag/java8
MAINTAINER itsme

ADD some-java-app.jar app.jar
ADD hosts tmp/
ENV PATH=/opt/java/bin:$PATH
CMD cat /tmp/hosts >> /etc/hosts; java -Djava.security.egd=file:/dev/./urandom -jar /app.jar; cat /etc/hosts

Últimos comandos mostram as alterações feitas pelo primeiro comando na linha do CMD.

    
por 19.05.2016 / 14:46
1

Acho que se você quiser importar um arquivo, use a função copy e não add - adicione se estiver obtendo de um URL ou importando um arquivo.

docker dá isso como um exemplo:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

no seu exemplo, isso deve funcionar

COPY hosts /tmp/
ENV PATH=/opt/java/bin:$PATH
RUN cat /tmp/hosts >> /etc/hosts
    
por 19.05.2016 / 11:40

Tags