Mit RUN kann nicht aus Dockerfile in die Datei / etc / hosts geschrieben werden

9

Ich mache ein Docker-Image mit einer ziemlich einfachen Docker-Datei. In der Docker-Datei habe ich diesen Befehl:

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

Der Befehl selbst scheint in Ordnung zu sein, da die Erstellung des Bildes an dieser Stelle nicht angehalten wird.

Das Problem ist folgendes: Beim Ausführen des Bildes ist die Zeile, die in "/ etc / hosts" eingefügt worden sein soll, nicht vorhanden.

Jetzt habe ich mich umgesehen und festgestellt, dass vor Version 1.2 von Docker ein Problem mit der Hosts-Datei in den Containern aufgetreten ist. In meinem Fall verwende ich die Version 1.5, die aktuellste Version.

Vermisse ich etwas

UPDATE 1:

Es scheint eine Menge offener und geschlossener Probleme auf Dockers Github-Seiten zu geben.

dlyk1988
quelle

Antworten:

12

Dies funktioniert unter Docker 1.7.0

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

Der Trick besteht darin, den Hostnamen in derselben Zeile hinzuzufügen, in der Sie ihn verwenden. Andernfalls wird die Hosts-Datei zurückgesetzt, da jeder RUN-Befehl einen neuen Zwischencontainer startet. Dies funktioniert beispielsweise nicht :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost
Jonatan
quelle
1
Danke für den Einblick! Obwohl korrekt (ich habe es überprüft) und im Allgemeinen nützlich, ist es für mich in diesem Fall nicht wirklich nützlich. Ich muss die "Hosts" -Datei füllen, wenn der Container ausgeführt wird.
dlyk1988
2
+1 für das Ausführen von Befehlen in derselben Zeile
myol
7

Nachdem ich das Update zu meiner Frage geschrieben hatte, beschloss ich, mir die "Probleme", die in Github eröffnet wurden, noch einmal genauer anzusehen. Es stellte sich heraus, dass eine Problemumgehung implementiert wurde:

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

Mit dem Argument "--add-host ..." beim Starten eines Containers kann die Hosts-Datei geändert werden.

dlyk1988
quelle
5
Ich möchte dies jedoch in Build tun können. Die Person, die den Container ausführt, sollte nichts über interne Hosts wissen müssen. Macht keinen Sinn!
Samsamm777
Ich echo @ samsamm777. Frage mich, ob es dafür einen guten Weg gibt?
Jonathan
Dies ist wirklich ein sehr überraschendes Verhalten, das in IT-Systemen niemals eine gute Idee ist.
Torsten Bronger