นักเทียบท่าจะเปิดเผยพอร์ตทั้งหมดหรือช่วงของพอร์ตตั้งแต่ 7000 ถึง 8000


101

ฉันสามารถระบุช่วงพอร์ตใน Dockerfile ได้หรือไม่

EXPOSE 7000-8000

และเมื่อเรียกใช้คอนเทนเนอร์ผูกพอร์ตที่เปิดเผยเหล่านี้ทั้งหมดเข้ากับพอร์ตเดียวกันบนเครื่องโฮสต์?

docker run -p 7000-8000:7000-8000

คำตอบ:


138

เนื่องจาก Docker 1.5 ตอนนี้คุณสามารถแสดงพอร์ตต่างๆไปยังคอนเทนเนอร์อื่น ๆ ที่เชื่อมโยงโดยใช้:

Dockerfile โดนคำสั่ง:

EXPOSE 7000-8000

หรือคำสั่งDocker run :

docker run --expose=7000-8000

หรือคุณสามารถเผยแพร่ช่วงของพอร์ตไปยังเครื่องโฮสต์ผ่านคำสั่งDocker run :

docker run -p 7000-8000:7000-8000


14
ตรวจสอบเอาต์พุตของ "iptables -L -n" บนเครื่องโฮสต์และคุณจะเห็นบรรทัดหลายร้อยบรรทัดสำหรับการแมปพอร์ตเดียว ถ้าคุณให้ 5,000-50000 ในทางปฏิบัติคุณต้องรอเป็นเวลานานนี่เป็นพฤติกรรมที่ควรหรือไม่?
ᐅ devrimbaris

8
@ ᐅ devrimbaris นอกจากนี้ยังมีขั้นตอนการเปิดตัวนักเทียบท่าต่อพอร์ต ฉันเชื่อว่านี่คือสิ่งที่ต้องใช้เวลาส่วนใหญ่ในการทำงาน
Matt

1
เอกสารพูดถึง--publish-all , -Pแฟล็กที่ "เผยแพร่พอร์ตที่เปิดเผยทั้งหมดไปยังพอร์ตแบบสุ่ม" docs.docker.com/engine/reference/commandline/run
nils petersohn

4

สำหรับใครก็ตามที่ประสบปัญหานี้และจบลงที่โพสต์นี้ ... ปัญหายังคงเปิดอยู่ - https://github.com/moby/moby/issues/11185


ขอบคุณมาก. ฉันแทบบ้าเพราะทุกอย่างติดขัดเมื่อพยายามเปิดเผยพอร์ตนับพันพอร์ต
sarusso

คุณพบวิธีแก้ปัญหาในการเปิดเผยช่วงหนึ่งพันกระถางหรือไม่? @sarusso
dko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.