it-swarm.com.de

Docker-Ports werden nicht angezeigt

Ich habe in Docker einen einfachen Knotenserver eingerichtet.

Dockerfile

FROM node:latest
RUN apt-get -y update
ADD example.js .
EXPOSE 1337   
CMD node example.js

example.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Erstellen Sie jetzt das Image

$ docker build -t node_server .

Jetzt im Container laufen

$ docker run -p 1337:1337 -d node_server  
$ 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70

Stellen Sie sicher, dass der Container ausgeführt wird und die Ports zugeordnet sind:

$ docker ps  

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5909e87302ab        node_server         "/bin/sh -c 'node exa"   7 seconds ago       Up 6 seconds        0.0.0.0:1337->1337/tcp   Grave_goldberg

Stellen Sie nun eine Verbindung zum Container her und überprüfen Sie, ob der Server ausgeführt wird:

$ docker exec -it 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70 /bin/bash 

Und in der Container-Befehlszeile geben Sie Folgendes ein:

[email protected]:/# curl http://localhost:1337
Hello World
Mon Feb 15 2016 16:28:38 GMT+0000 (UTC)

Sieht gut aus, oder?

Das Problem

Wenn ich den gleichen Curl-Befehl auf dem Host ausführe (oder mit meinem Browser zu http: // localhost: 1337 navigiere), sehe ich nichts.

Irgendeine Idee, warum die Portzuordnung zwischen Container und Host nicht funktioniert?

Dinge, die ich bereits ausprobiert habe:

  • Laufen mit dem --expose 1337 Flagge
46
Assaf Shomer

Deine Ports werden korrekt angezeigt, aber dein Server hört Verbindungen auf 127.0.0.1 in Ihrem Container:

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n'+new Date);
}).listen(1337, '127.0.0.1');

Sie müssen Ihren Server folgendermaßen ausführen:

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n'+new Date);
}).listen(1337, '0.0.0.0');

Beachten Sie die 0.0.0.0 anstelle von 127.0.0.1.

66
Chris McKinnel

Hinzufügen von EXPOSE 1337 zur Docker-Datei

EXPOSE is verpflichtend Wenn Sie diesen Port anderen Containern "aussetzen" möchten.

As BMitch Kommentare:

Expose wird nicht benötigt, um einen Port zu veröffentlichen oder Container zu Container über ein freigegebenes Docker-Netzwerk zu verbinden.
Es handelt sich um Metadaten zum Veröffentlichen aller Ports mit -P Und zum Überprüfen des Images/Containers.

So:

Laufen mit dem --expose 1337 Flag

Nicht genau: Sie müssen Docker ausführen es mit -p 1337:1337

Sie benötigen entweder:

  • bild mit der Anweisung EXPOSE erstellen (wird von -P verwendet)
  • oder mit dem auf dem Host veröffentlichten Port ausführen -p 1337:1337

Der Test curl http://localhost:1337 Wurde innerhalb des Containers durchgeführt (kein EXPOSE oder Publizieren erforderlich).
Wenn Sie möchten, dass es vom Linux-Host aus funktioniert, benötigen Sie EXPOSE+-P oder -p 1337:1337.
Entweder.

Allein die Angabe von expose ist gut, um die Absicht zu dokumentieren, tut aber nichts für sich.

Zum Beispiel:

https://i.stack.imgur.com/wmKgd.png

In dieser Abbildung ist 8080 EXPOSE'd, veröffentlicht auf dem Linux-Host 8888.
Und wenn dieser Linux-Host nicht der eigentliche Host ist, muss derselbe Port zum eigentlichen Host weitergeleitet werden. Siehe " Zugriff auf Tomcat im Docker-Container über den Browser? ".

Wenn localhost vom Linux-Host aus nicht funktioniert, versuchen Sie es mit seiner IP-Adresse:

CID=$(docker run -p 1337:1337 -d node_server)
CIP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID})
curl http://${CIP}:1337

Oder lassen Sie Ihren Server, wie oben erwähnt, von Verbindungen abhören, die von einer beliebigen IP-Adresse kommen: 0.0.0.0 Dies ist die Broadcast-Adresse oder ein Netzwerk ohne Netzwerk .

24
VonC