คุณไม่สามารถทำสิ่งนี้ผ่าน Docker แต่คุณสามารถเข้าถึงพอร์ตที่ไม่ได้รับการบรรจุของเครื่องโฮสต์ได้
หากคุณมีคอนเทนเนอร์ที่มีบางสิ่งกำลังทำงานอยู่บนพอร์ต 8000 คุณสามารถใช้งานได้
wget http://container_ip:8000
ในการรับที่อยู่ IP ของคอนเทนเนอร์ให้รันคำสั่ง 2:
docker ps
docker inspect container_name | grep IPAddress
ภายใน Docker shells จะเรียก iptables เมื่อคุณเรียกใช้รูปภาพดังนั้นอาจมีการเปลี่ยนแปลงบางอย่างในการทำงาน
วิธีเปิดเผยพอร์ตของคอนเทนเนอร์ 8000 บนโลคัลโฮสต์ของคุณพอร์ต 8001:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
วิธีหนึ่งที่คุณสามารถทำสิ่งนี้ได้คือการตั้งค่าคอนเทนเนอร์อื่นด้วยการจับคู่พอร์ตที่คุณต้องการและเปรียบเทียบผลลัพธ์ของคำสั่งiptables-save (แม้ว่าฉันต้องลบตัวเลือกอื่น ๆ บางตัวที่บังคับให้ทราฟฟิกส่งผ่านนักเทียบท่า) พร็อกซี่)
หมายเหตุ: นี่เป็นการทำลายนักเทียบท่าดังนั้นควรทำโดยตระหนักว่ามันอาจสร้างควันสีน้ำเงินได้
หรือ
อีกทางเลือกหนึ่งคือดูตัวเลือก (ใหม่โพสต์ 0.6.6?) -P ซึ่งจะใช้พอร์ตโฮสต์แบบสุ่มและต่อสายเหล่านั้น
หรือ
ด้วย 0.6.5 คุณสามารถใช้คุณสมบัติลิงค์เพื่อสร้างคอนเทนเนอร์ใหม่ที่พูดถึงสิ่งที่มีอยู่ด้วยการถ่ายทอดเพิ่มเติมไปยังแฟล็ก container's นั้นหรือไม่? (ฉันยังไม่ได้ใช้ลิงค์)
หรือ
ด้วยนักเทียบท่า 0.11? คุณสามารถใช้docker run --net host ..
เพื่อแนบคอนเทนเนอร์ของคุณโดยตรงกับอินเทอร์เฟซเครือข่ายของโฮสต์ (เช่น net ไม่เว้นระยะชื่อ) และทำให้พอร์ตทั้งหมดที่คุณเปิดในคอนเทนเนอร์ถูกเปิดเผย