VorwortJedes Mal, wenn Sie Docker verwenden, um einen Hadoop-Cluster zu starten, müssen Sie die Netzwerkkarte neu binden, die IP korrigieren und die Datei /etc/hosts ändern. Dies ist sehr problematisch, daher möchte ich die Ursache untersuchen und Optimierungsmöglichkeiten finden. 1. Gründe/etc/hosts, /etc/resolv.conf und /etc/hostname, diese drei Dateien im Container existieren nicht im Image. Beim Starten des Containers werden diese Dateien in Form von Mount in den Container eingebunden. Wenn diese Dateien im Container geändert werden, sind die geänderten Teile daher nicht in der obersten Ebene des Containers vorhanden, sondern werden direkt in diese drei physischen Dateien geschrieben. Warum verschwinden die Änderungen nach dem Neustart? Der Grund ist: Jedes Mal, wenn Docker einen Container startet, erstellt es eine neue /etc/hosts-Datei. Warum ist das so? Der Grund ist: Der Container wird neu gestartet, die IP-Adresse wird geändert und die ursprüngliche IP-Adresse in der Hosts-Datei ist ungültig. Daher sollte die Hosts-Datei geändert werden, da sonst fehlerhafte Daten generiert werden. 2. LösungGeben Sie bei jedem Start des Containers die IP-Adresse und den Hostnamen an und fügen Sie Hosts zu /etc/hosts hinzu. Der Befehl lautet wie folgt: docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32 -d -P -p 50070:50070 -p 8088:8088 hadoop:master Docker-Netzwerkmodus und Konfigurationsvorgänge --hostname: Hostnamen angeben; --net: Netzwerkmodus angeben --ip: IP angeben --add-host: Geben Sie den Host an, der zu /etc/hosts hinzugefügt werden soll. Die obigen Befehle erfordern Docker-Version 1.9 oder höher;Nachdem Sie den Container gestartet haben, betreten Sie den Container, um /etc/hosts anzuzeigen [root@centos-linux-7 /]# docker exec -it hadoop0 bash [root@hadoop0 /]# cat /etc/hosts 127.0.0.1 lokaler Host ::1 lokaler Host ip6-lokaler Host ip6-Loopback fe00::0 ip6-lokales Netz ff00::0 ip6-mcastprefix ff02::1 ip6-alle Knoten ff02::2 ip6-allerouter 192.168.10.31 hadoop1 192.168.10.32 hadoop2 192.168.10.30 hadoop0 [root@hadoop0 /]# Der obige Befehl ist zu lang und kann als Shell-Skript geschrieben werden. Im Internet werden mehrere andere Möglichkeiten erwähnt:1. Verwenden Sie Dockerfile, um ein Image zu erstellen 2. Beginnen Sie mit der Verwendung von Docker-Compose 3. Ändern Sie die Konfigurationsdatei der Umgebungsvariablen, die der Docker-Container öffentlich zu laden beginnt (ich habe die Konfigurationsdatei für meine Version nicht gefunden). Die erste Methode sollte nicht funktionieren. Obwohl Dockerfile beim Erstellen eines Images relevante Umgebungsvariablen festlegen kann, werden, wie bereits erwähnt, IP, Hostname und /etc/hosts alle neu geladen, sodass sie beim Starten des Docker-Containers angegeben werden müssen. Diese im Image sind nicht akzeptabel. Zweitens bin ich mit Docker-Compose noch nicht vertraut und werde vorerst nicht näher darauf eingehen. Der dritte ist für mich unpraktisch, da er öffentlich ist und nicht für verschiedene Container personalisiert werden kann; Zusammenfassend halte ich es für am bequemsten, über die Befehlszeile anzugeben, wann der Container gestartet wird. Der Nachteil besteht jedoch darin, dass die Befehlszeile zu lang ist. Sie können es jedoch einfach als Shell-Skript schreiben! Ergänzung: Linux Docker legt eine feste Container-IP fest (Docker-Standardcontainer-IP ändert sich) 1. Erstellen Sie Ihren eigenen Netzwerktyp und geben Sie das Netzwerksegment anBefehl Docker-Netzwerk erstellen --subnet=172.18.0.0/16 meinNetzwerk 2. Beim Starten des Images die eigene Netzwerk-IP angebenBefehl docker run -itd -p 5001:5001 --name Bildname --net mein Netzwerk --ip 172.18.0.2 --privileged=true --restart=always -d Bildname 3. Starten Sie Docker neu und zeigen Sie die Container-IP anDocker neu starten Befehl Dienst Docker Neustart Alle Container anzeigen Befehl Docker ps -a Containerinformationen anzeigen Befehl Docker überprüft den Containernamen Auf diese Weise ändert sich die Container-IP nicht Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur. Das könnte Sie auch interessieren:
|
<<: HTML-Tags dl, dt, dd zum Erstellen einer Tabelle vs. Tabellenerstellungstabelle
>>: Vue realisiert einfachen Effekt des Lauflichts
Das MySQL auf einem Server im Computerraum lief e...
Inhaltsverzeichnis splice() Methode join() Method...
Inhaltsverzeichnis Frage Serverebene und Speicher...
1. Wenn der Benutzer über die Berechtigung zum Er...
Es gibt zwei spezielle Werte, die jeder Eigenscha...
1. Überprüfen Sie den Zeichensatz 1. Überprüfen S...
1. Verwenden Sie das Installationspaket, um MySQL...
1. Ändern Sie die Hardwareversion der virtuellen ...
Heute habe ich mich mit der Migration eines Proje...
Ich möchte kürzlich einen Docker für Cron-geplant...
1. Überprüfen Sie sql_mode wählen Sie @@sql_mode ...
Listen werden verwendet, um eine Reihe ähnlicher o...
Mit den richtigen Einstellungen können Sie Linux-...
Inhaltsverzeichnis 1. Variablenübersicht 1.1 Spei...
Cooper sprach über den visuellen Pfad des Benutze...