2016-07-11 7 views
19

Ich möchte meine /etc/hosts Datei während "Docker Build" aktualisieren.So aktualisieren Sie die Datei/etc/hosts im Docker-Image während des "Docker Build"

Ich habe die Zeile in Dockerfile hinzugefügt, aber es aktualisiert weder /etc/hosts noch gibt es einen Fehler.

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

Ich muss /etc/hosts aktualisieren. Kann mir jemand etwas vorschlagen?

+0

Sind Sie boot2docker mit Ihrem Docker baut ausführen? – VonC

+0

Nein, ich verwende die Linux-Version von docker 1.8. –

+1

Und wenn Sie Ihr Bild als Container ausführen, ist seine/etc/hosts unverändert? Oder hast du deinen Linux-Host/etc/hosts gemeint? – VonC

Antwort

22

Mit einer neueren Version von Docker, könnte dies mit Docker-compose und sein extra_hosts directive

Zuordnungen hinzufügen Hostnamen erfolgen.
Verwenden Sie dieselben Werte wie docker run client --add-host parameter (die bereits für den Docker 1.8 verfügbar sein sollten).

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

Kurz: /etc/hosts des Containers ändern, wenn es ausgeführt wird, es nicht zu bauen.

+0

Ich möchte/etc/hosts im Docker-Image ändern. –

+0

@PrakashSingh Ich stimme zu, aber das scheint nicht einfach zu sein. – VonC

+0

Niemand hat diesen Anwendungsfall implementiert? –

0

für mich gearbeitet Folge durch die Datei während Docker Montage statt Docker bauen laufen

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

Sie können die Host-Datei mit Echo in RUN Schritt ändern, da Docker die Datei beibehalten, wenn Sie es starten und Der Inhalt der Datei wird von docker verwaltet.

folgenden jedoch verwendet werden kann, das gleiche zu erreichen:

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 " ] 

Key hier zu bemerken, ist die Verwendung von exec-Befehl als Docker Dokumentation vorschlägt. Verwendung von exec wird den Java-Befehl als PID 1 für Container machen. Docker Interrupts werden nur darauf reagieren.

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

+0

ty! Dies ist eine großartige Lösung – xero

+0

Falls Sie nach Kubenetes Lösung suchen, können Sie hostAliases verwenden. https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ genau wie docker komponieren extra_hosts. –

-3

Nur eine schnelle Antwort Containers laufen mit:

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

sobald der Behälter geöffnet ist:

cd .. 

dann

`cd etc` 

und dann können Sie

cat hosts 

oder:

apt-get update 
apt-get vim 

oder einen Editor Sie es in vim mögen und öffnen, hier können Sie ändern Ihre Start ip sagen 0.0.0.0

Verwandte Themen