ฉันสามารถทำได้docker run -p 3000:3000 image
โดยไม่ต้อง EXPOSE
พอร์ตที่อยู่ในภาชนะ (ดูด้านล่าง) หากเป็นจริงแล้วทำไมต้องกังวลกับการวาง EXPOSE ไว้ใน Dockerfile มันเป็นเพียงการสื่อสารกับผู้ใช้ภาพ? เพราะฉันไม่รู้เหตุผลที่ใช้งานได้ของพอร์ต EXPOSE หากพวกมันถูกผูกมัดอยู่ดี
นี่คือขั้นตอนที่แสดงการเชื่อมโยงพอร์ตในคอนเทนเนอร์แม้ว่าจะไม่ใช่ EXPOSEd ก็ตาม
$ cat Dockerfile
FROM alpine
RUN apk add nodejs npm vim
COPY webserver /webserver
CMD [ "node", "/webserver/index.js" ]
$ docker build .
Sending build context to Docker daemon 1.931MB
Step 1/4 : FROM alpine
---> 11cd0b38bc3c
Step 2/4 : RUN apk add nodejs npm vim
---> Using cache
---> 4270f8bdb201
Step 3/4 : COPY webserver /webserver
---> Using cache
---> 67f4cda61ff0
Step 4/4 : CMD [ "node", "/webserver/index.js" ]
---> Using cache
---> 1df8f9024b85
Successfully built 1df8f9024b85
$ curl localhost:4400
curl: (7) Failed to connect to localhost port 4400: Connection refused
$ docker run -d -p 4400:3000 1df8f9024b85
7d0e6c56f8ad8827fe72830a30c1aac96821104b8ea111291ca39e6536aad8fd
$ curl localhost:4400
Hello World!
$
-P
ตั้งค่าสถานะยูทิลิตี้อื่น ๆ สามารถสอบถามการเรียกใช้คอนเทนเนอร์สำหรับข้อมูลเมตานี้ซึ่งเป็นประโยชน์ในพร็อกซีที่ปรับปรุงกฎการส่งต่อแบบไดนามิกโดยใช้พอร์ตที่เปิดเผยเหล่านี้เป็นค่าเริ่มต้น