Rufen Sie die IP-Adresse des Docker-Hosts aus einem Docker-Container ab

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein neues Projekt
  2. Definiere ein Bild
  3. Erstellen Sie ein Nginx-Image
  4. Führen Sie einen Container aus
  5. Rufen Sie die IP-Adresse des Docker-Hosts aus einem Docker-Container ab
  6. Abschluss
Rufen Sie die IP-Adresse des Docker-Hosts aus einem Docker-Container ab

IP-Adresse bedeutet Internet Protocol-Adresse, ein Zahlenwert mit der Syntax 192.168.0.1. IP-Adressen identifizieren ein mit einem Netzwerk verbundenes Gerät eindeutig und helfen uns auch beim Zugriff auf Anwendungen, die auf verschiedenen Geräten im Internet ausgeführt werden.

Anwendungen können in zwei Umgebungen ausgeführt werden: localhost oder auf einem Remote-Server wie AWS. Diese Anwendungen verwenden die IP-Adresse des Hosts, um auf die Anwendungen oder Container zuzugreifen, die auf ihnen ausgeführt werden.

Da wir Anwendungen normalerweise auf dem lokalen Host entwickeln und ausführen, behandelt dieses Tutorial keine Anwendungen, die in der Produktion ausgeführt werden. In diesem Tutorial erfahren Sie, wie Sie die IP-Adresse des Docker-Hosts aus einem Docker-Container abrufen.

Erstellen Sie ein neues Projekt

Öffnen Sie WebStorm IDEA und wählen Sie Datei > Neu > Projekt. Wählen Sie im sich öffnenden Fenster Leeres Projekt und ändern Sie den Projektnamen von unbenannt in docker-host-ip oder verwenden Sie einen beliebigen Namen.

Drücken Sie abschließend die Schaltfläche Erstellen, um ein leeres Projekt zu erstellen.

Um diese Anwendung zu testen, verwenden wir ein Nginx, das eine Webseite anzeigt, die den zufällig generierten Text enthält. Erstellen Sie eine index.html-Datei und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Lorem ipsum text</title>
</head>
<body>
<p>Magna elaboraret dictumst sed quidam potenti tempus
    principes morbi. Sit libero et eruditi lectus nonumes simul.
    Dicam putent diam volumus similique ponderum sententiae maecenas mattis ridens.
    Homero iisque regione voluptatibus nullam detraxit nullam eleifend brute.
    Ligula orci dicat ac luptatum quisque appareat invidunt odio mazim.
    Reformidans impetus facilis veniam fringilla.
    Consectetur eros ferri congue latine constituto veritus persequeris dolorum felis.
    Harum felis theophrastus aliquam wisi nibh nec assueverit mi nonumes.
    Cubilia option ei ex vulputate at habeo aliquet omittantur delectus.
    Sanctus dolorem moderatius venenatis agam suscipit comprehensam imperdiet amet.</p>
</body>
</html>

Um diesen Text zu generieren, installieren Sie das Lorem-Plugin und drücken Sie auf Ihrer Entwicklungsumgebung Code > Generate > Generate Text, um einen Text mit 10 Sätzen zu generieren.

Definiere ein Bild

Erstellen Sie eine Datei namens Dockerfile und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.

FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
  1. VON – Dies definiert das Basisbild, auf dem unser benutzerdefiniertes Bild mit nachfolgenden Anweisungen erstellt werden soll.
  2. KOPIEREN – Dies kopiert alle Dateien und Verzeichnisse im aktuellen Verzeichnis in das Image-Dateisystemziel /usr/share/nginx/html.

Um mehr über die Verwendung des Nginx-Images zu erfahren, bietet der Docker-Hub offizielles Nginx-Image detaillierte Informationen zum Erstellen eines Images und zum Ausführen eines Containers daraus.

Erstellen Sie ein Nginx-Image

Um ein Nginx-Image unserer Anwendung zu erstellen, verwenden Sie den folgenden Befehl, um ein Image mit dem Tag host-ip:latest zu erstellen.

~/WebstormProjects/docker-host-ip$ docker build --tag host-ip:latest .

Dieser Befehl führt die Anweisungen des Dockerfiles sequentiell aus. Der Vorgang kann wie unten gezeigt im Terminalfenster angezeigt werden.

=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23  0.0s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c374086  0.2s
=> [2/2] COPY . /usr/share/nginx/html

Führen Sie einen Container aus

In diesem Abschnitt möchten wir die IP-Adresse des Hosts aus dem laufenden Container sehen. Da wir keinen laufenden Container haben, müssen wir zuerst einen Container mit dem folgenden Befehl ausführen.

~/WebstormProjects/docker-host-ip$ docker run --name host-ip-service -d -p 8000:80 host-ip:latest

Dieser Befehl führt einen Container namens host-ip-service aus, der Port 8000 auf dem Host bereitstellt, um auf Post 80 auf dem Container zu lauschen. Um den Inhalt der Anwendung anzuzeigen, stellen Sie im Browser eine Anfrage an localhost:8000 (http://localhost:8000/), und eine Webseite mit zufälligem Text wird angezeigt.

Rufen Sie die IP-Adresse des Docker-Hosts aus einem Docker-Container ab

Da wir einen Befehl in einem laufenden Container ausführen möchten, verwenden Sie den folgenden Befehl, um in den Docker-Container einzudringen.

docker exec -it host-ip-service /bin/sh

Ausgang:

/ #

Um die IP-Adresse des Docker-Hosts zu erhalten, auf dem unser Container host-ip-service läuft, geben Sie den folgenden Befehl ein und drücken Sie die Enter-Taste auf Ihrer Tastatur.

/ # /sbin/ip route|awk '/default/ { print $3 }'

Ausgang:

172.17.0.1

Beachten Sie, dass wir, da wir die Docker-Bridge verwenden, die die Standardeinstellung für Container ist, die IP-Adresse der Bridge erhalten, die 172.17.0.1 lautet, anstelle der IP-Adresse in Ihrem Netzwerk, mit dem der Host verbunden ist.

Abschluss

In diesem Tutorial haben wir gelernt, die IP-Adresse des Docker-Hosts aus einem Container abzurufen, indem wir eine Nginx-Anwendung nutzen. Beachten Sie, dass es andere Methoden gibt, um das gleiche Ziel zu erreichen, je nachdem, wo der Container ausgeführt wird, und es uns freistehen sollte, jeden Ansatz zu verwenden, der die Anforderungen erfüllt.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Verwandter Artikel - Docker Container