2016-07-11 23 views
19

Desidero aggiornare il file /etc/hosts durante "build docker".Come aggiornare il file/etc/hosts nell'immagine Docker durante "docker build"

Ho aggiunto sotto la riga in Dockerfile ma non sta né aggiornando il file /etc/hosts né dando alcun errore.

RUN echo "192.168.33.11 mynginx" >> /etc/hosts 

ho bisogno di aggiornare /etc/hosts. Qualcuno può suggerire su questo?

+0

Stai usando boot2docker per eseguire la vostra finestra mobile a costruire? – VonC

+0

No, sto usando la versione Linux di docker 1.8. –

+1

E quando si esegue l'immagine come un contenitore, il suo/etc/hosts è invariato? O ti riferivi al tuo host Linux/etc/hosts? – VonC

risposta

22

Con una versione più recente di finestra mobile, questo potrebbe essere fatto con finestra mobile-composizione e la sua extra_hosts directive

Aggiungi mappature hostname.
Utilizzare gli stessi valori di docker run client --add-host parameter (che dovrebbe già essere disponibile per la finestra mobile 1.8).

extra_hosts: 
- "somehost:162.242.195.82" 
- "otherhost:50.31.209.229" 

In breve: modificare /etc/hosts del vostro contenitore durante l'esecuzione, non costruirlo.

+0

Voglio cambiare/etc/hosts nell'immagine della finestra mobile. –

+0

@PrakashSingh Sono d'accordo, ma non sembra facile. – VonC

+0

Nessuno ha implementato questo caso d'uso? –

0

In seguito ha lavorato per me montando il file durante la finestra mobile correre al posto di finestra mobile costruire

docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image> 
5

Non è possibile modificare il file host utilizzando eco in fase RUN perché finestra mobile manterrà il file quando si inizierà e il contenuto del file sarà gestito dalla finestra mobile.

Tuttavia seguente può essere utilizzato per ottenere lo stesso:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ] 

chiave da notare è l'uso di comando exec come documentazione di finestra mobile suggerisce. L'utilizzo di exec renderà il comando java come PID 1 per contenitore. Gli interrupt Docker rispondono solo a questo.

Vedi https://docs.docker.com/engine/reference/builder/#entrypoint

+0

ty! questa è un'ottima soluzione – xero

+0

Se stai cercando la soluzione di kubenetes puoi usare hostAliases. https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ proprio come la finestra mobile componi extra_hosts. –

-3

Basta una risposta rapida per eseguire il vostro contenitore con:

docker exec -it <container name> /bin/bash 

una volta che il contenitore è aperto:

cd .. 

poi

`cd etc` 

e quindi si può

cat hosts 

o:

apt-get update 
apt-get vim 

o qualsiasi editor che ti piace e apre in vim, qui è possibile modificare dire che il vostro IP di avvio a 0.0.0.0

Problemi correlati