Immer noch verwirrt, warum Docker funktioniert, wenn Sie einen Prozess auf 0.0.0.0, aber nicht auf 127.0.0.1 hören lassen

Immer noch verwirrt, warum Docker funktioniert, wenn Sie einen Prozess auf 0.0.0.0, aber nicht auf 127.0.0.1 hören lassen
const hostname = '0.0.0.0'; // << This is where I'm confused
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Wenn ich diese App dockerisiere und in einem Container ausführe, funktioniert der Hostname 0.0.0.0, aber 127.0.0.1 funktioniert nicht. Ich verstehe, dass der Grund dafür darin liegt, dass Docker-Container praktisch ihre eigene IP erhalten.

Wenn ich also den Container erstelle und ausführe, die Hostnamenvariable auf 127.0.0.1 setze und dann 127.0.0.1 in meinem Browser aufrufe, stelle ich keine Verbindung zur IP-Adresse des Containers her, sondern zu meinem lokalen Computer.

Aber warum stellt die Container-App, wenn ich sie auf 0.0.0.0 ausführe und in meinem Browser 127.0.0.1 aufrufe, jetzt eine Verbindung zum Container her und nicht zu meinem lokalen Computer?

Danke schön.

Antwort1

Docker ist „eine andere Maschine“ und Ihre Maschine erhält eine Portweiterleitung zu dieser Maschine auf dem lokalen Host.

Wenn also die App im Docker auf 127.0.0.1 hört, was nur innerhalb dieser Maschine gültig ist, müssen Sie auf die anyAdresse hören, um von „außen“ eine Verbindung damit herzustellen.

Es gibt also 2 verschiedene 127.0.0.1.

Wenn Sie (0.0.0.0) abhören, anyist es auch auf 127.0.0.1 und allen anderen Schnittstellen/IPs auf dem Computer verfügbar.

Heutzutage sollten Sie darauf achten, ::welche die IPv6-Variante ist, aber sie sollte auch v4 enthalten. Wenn Sie versuchen, aktuelle Standards zu verwenden, werden zukünftige Probleme reduziert.

verwandte Informationen