2016-04-28 13 views
4

Hier mein Dockerfile istDocker wie Behälter mit definierten Name-Server in /etc/resolv.conf starten

FROM javamachine_0.1.2 
MAINTAINER Meiram 
RUN /report/report.sh start 
ENV LANG C.UTF-8 ENV LANGUAGE C.UTF-8 ENV LC_ALL C.UTF-8 
RUN echo "nameserver 192.168.1.100" > /etc/resolv.conf 
COPY resolv.conf /etc/resolv.conf 
EXPOSE 9090 

, wenn der Behälter Richtlinie Docker Lauf zu schaffen --dns auch keine Einträge in /etc/resolv.conf ändern

Wie können Einträge in /etc/resolv.conf dauerhaft geändert werden?

+0

Werfen Sie einen Blick auf [meine Frage] hinzufügen (https: // Stackoverflow .com/questions/45672193/curl-command-returns-nichts-in-dockerfile-while-it-funktioniert-in-jedem-anderen-linu) und die Antwort. –

Antwort

1

, wenn Sie verwenden --dns Sie diese Zeilen entfernen müssen können:

RUN echo "nameserver 192.168.1.100" > /etc/resolv.conf 
COPY resolv.conf /etc/resolv.conf 

, auch

versuchen, die Linien zu tauschen .. COPY-Befehl wird die vorherige außer Kraft setzen.

+0

Ich rekonstruiere das Bild mit Dockerfile. Ich wischte 2 line RUN echo "Name-Server 192.168.1.100"> /etc/resolv.conf COPY resolv.conf /etc/resolv.conf Docker Lauf 8.8.8.8 Test/test_img_0.1.2 --dns Aber Container kann nicht gestartet werden. –

+0

Ich weiß es nicht vielleicht wenn ich Container Docker Run erstellen --dns 8.8.8.8-td ubunu: neueste Es ist in Ordnung. Aber ich brauche Behälter mit bestehenden Netzwerk erstellen und statische IP Docker laufen --net my_net --dns 8.8.8.8 --ip 10.10.10.10 -td ubuntu: neueste /etc/resolv.conf Einträge sind Nameserver 127.0.0.11 Optionen ndots: 0 –

+0

Nur ein Kommentar: alle Andocker offiziellen Ressourcen (und inoffizielle) scheint zu drängen, nicht direkt mit resolv.conf manipulieren - Docker-Engine soll das managen (das gleiche gilt für/etc/Gastgeber). Ich glaube, dass Sie das oben genannte mit '--dns'-Wahl entweder zum docker eninge oder zur Behälterlaufzeit erreichen können. – demaniak

1

fand ich die Antwort

Wenn Sie einen Container mit Standard-Netzwerkeinstellungen (172.0.0.x)

Die wichtigsten --dns arbeitet erstellen müssen. funktioniert aber nicht mit benutzerdefinierten Netzwerk --net

So some_name_of_your_network, wenn Sie Container erstellen müssen Sie Host-Namen in/etc/hosts

mit diesem Befehl

docker run --net my_net --ip 192.168.1.x --add-host webserver:192.168.1.100 --add-host mysqlserver:192.168.1.x -td someimage 

definieren Aber diese Lösung ist für mich nicht akzeptabel. Weil ich /etc/resolv.conf bearbeiten muss

1

Siehe https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/ für weitere Details.

Sie werden das folgende in der Docker Befehlszeile hinzufügen möchten, statt der alle --add-host Optionen (unter der Annahme, dass die Gastgeber durch Ihre dns auflösbar sind)

--dns=192.168.1.100 

Basierend auf der Tatsache, dass Sie Wenn Ihr Webserver und mysqlserver ebenfalls Dockercontainer sind, sollten Sie die Sammlung von Containern über docker-compose konfigurieren. Weitere Informationen finden Sie unter https://docs.docker.com/compose/overview/.

+0

Was ist, wenn Sie mehrere Nameserver einstellen müssen? Ich versuche zum Beispiel zwei zu setzen. – finbarr

+0

Stellt sich heraus die Antwort ist nur die Flagge zu wiederholen, sorry. Siehe [Github] (https://github.com/docker/docker/issues/5435). In diesem Fall würde '--dns = 192.168.1.100 --dns = 192.168.1.101 'funktionieren. – finbarr