744 Stimmen

Was ist der Unterschied zwischen "expose" und "publish" in Docker?

Ich experimentiere mit Dockerfiles, und ich glaube, dass ich die meisten der Logik verstehe. Allerdings sehe ich den Unterschied zwischen "exposing" und "publishing" eines Ports in diesem Kontext nicht.

All die Tutorials, die ich gesehen habe, beinhalten zuerst den EXPOSE Befehl im Dockerfile:

...
EXPOSE 8080
...

Dann bauen sie ein Image aus diesem Dockerfile:

$ docker build -t an_image - < Dockerfile

Und dann publishen sie denselben Port wie oben beim Ausführen des Images:

$ docker run -d -p 8080 an_image

oder sie veröffentlichen alle Ports mit

$ docker run -d -P an_image

Was ist der Sinn darin, einen Port im Dockerfile freizugeben, wenn er sowieso veröffentlicht wird? Gäbe es jemals ein Bedürfnis, zuerst einen Port freizugeben und ihn später nicht zu veröffentlichen? Effektiv möchte ich alle Ports, die ich im Dockerfile beim Erstellen des Images verwenden werde, angeben und mich dann einfach damit befassen, sie erneut auszuführen:

$ docker run -d an_image

Ist das möglich?

1voto

Das SCHLÜSSELWORT EXPOSE ermöglicht es dem Besitzer, anderen mitzuteilen, welche Ports hauptsächlich vom Container verwendet werden.

Sie können jeden Port veröffentlichen, auch wenn Sie den Port nicht in EXPOSE angeben.

Zum Beispiel erstellen wir eine Dockerdatei mit dem Nginx-Image, das den Port 1234 freigibt

VON nginx:latest
EXPOSE 1234

und erstellen es

docker build -t porttest .

Und führen Sie es mit der Veröffentlichung des Ports 80 auf localhost:80 aus

docker run -p 80:80 porttest

Wenn Sie zu localhost:80 gehen, sehen Sie die Standardseite von Nginx. Standardseite von Nginx

0voto

junaid Punkte 9
  1. aussetzen - wird nur diesen spezifischen Port zulassen, um mit dem Container zu verbinden, und es wird nur als "interne Containerkommunikation" verwendet
  2. -p (veröffentlichen) wird den Host-Port mit dem Container-Port verknüpfen (den Sie bereits im Schritt 1 oder in der Docker-Datei freigegeben haben) und sobald Sie ihn freigegeben haben, müssen Sie ihn verknüpfen, sodass wir veröffentlichen verwenden, dann wird der Container außerhalb der Welt/des Internets zugreifbar sein.

-7voto

Mansur Ul Hasan Punkte 2026

EXPOSE wird verwendet, um den lokalen Port auf den Container-Port zuzuordnen d.h. Wenn Sie es in der Docker-Datei wie folgt spezifizieren:

EXPOSE 8090

Was es tun wird, ist, den Localhost-Port 8090 auf den Container-Port 8090 zuzuordnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X