
Ich verwende Ubuntu 22.04.3 LTS in einer virtuellen Maschine. Ich habe Nginx mit Port 80 installiert.
Beim Zugriff auf http://localhost:80 wird die normale Webseite von Nginx angezeigt.
Anschließend habe ich Docker und zwei Images installiert. Dem Image habe ich API-Zugriff auf Port 9000 gewährt.
Beim Zugriff auf http://localhost:9000 wird jedoch ein Fehler angezeigt. Der Zugriff in Postman gibt eine 404 zurück.
Anscheinend muss ich Port 9000 in Nginx verknüpfen oder zulassen oder den Zugriff von Docker mit dem Port verknüpfen.
Ich konnte nicht herausfinden, wie ich in Nginx weitere Ports zulassen oder den Container verknüpfen kann, der über Port 9000 verfügbar ist. So wird es für das Image im Docker angezeigt:
0.0.0.0:9000->9000/tcp, :::9000->9000/tcp
Die Schritte für den Server ausgeführt:
cd /etc/nginx/sites-enabled
sudo "${EDITOR:-vi}" docker
server {
listen 80;
listen [::]:80;
server_name example.ubuntu.com;
root /var/www/docker;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Wenn ich GET in Postman ausführe: http://localhost:9000/kalum-management/v1/jornadas, sollten Daten zurückgegeben werden. Aus irgendeinem Grund ist die Verwechslung mit Docker und Nginx völlig durcheinander geraten und ich bin mir nicht sicher, wie ich den Docker für Port 9000 verfügbar machen kann.
Antwort1
Docker erstellt sein eigenes Netzwerk und seinen eigenen Netzwerkadapter. Beim Ausführen der Container können Sie die Option network_mode host verwenden, um vom Host-Betriebssystem aus eine Verbindung zum Docker-Netzwerk herzustellen, mit dem der Container verknüpft ist. Ich empfehle die Verwendung von Docker Compose und zeige Ihnen auch ein Beispiel für Docker-Compose, um weitere Ports zu veröffentlichen.
version: '3'
services:
your_service_name:
container_name: your_container_name
image: your_image_name
network_mode: host
volumes:
- /path/on/host:/mnt
Beachten Sie, dass Sie die öffentlichen Ports und den Netzwerkmodus-Host nicht zusammen verwenden können.
Speichern Sie diese Datei in einem Verzeichnis als docker-compose.yml und führen Sie sie dann mitdocker-compose up -d
Option 2
Oder Sie ermitteln die IP-Adresse des Containers mit dem folgenden Befehl
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
Und dann ersetzen Sie anstelle von http://localhost:9000 localhost durch die IP des Containers. Dies funktioniert möglicherweise nicht, weil das Docker-Netzwerk (das beim Starten des Containers automatisch erstellt wird) vom Host aus nicht erreichbar ist (korrigieren Sie mich, wenn ich falsch liege, aber standardmäßig gibt es kein Routing zwischen dem Hauptnetzwerk des Host-Betriebssystems und dem Docker-Netzwerk, mit dem der Container verknüpft ist).