ฉันจะแสดงพอร์ตมากกว่าหนึ่งพอร์ตด้วย Docker ได้อย่างไร


459

ดังนั้นฉันจึงมี 3 พอร์ตที่ควรเปิดเผยกับอินเทอร์เฟซของเครื่อง เป็นไปได้หรือไม่ที่จะทำเช่นนี้กับคอนเทนเนอร์ Docker


1
เป็นไปได้ที่จะเปลี่ยนเส้นทางหลายพอร์ต ดู doco: docs.docker.io/en/latest/use/port_redirection
Mark O'Connor

คำตอบ:


717

หากต้องการเปิดเผยเพียงหนึ่งพอร์ตนี่คือสิ่งที่คุณต้องทำ:

docker run -p <host_port>:<container_port>

หากต้องการเปิดเผยหลายพอร์ตเพียงระบุ-pอาร์กิวเมนต์หลายตัว:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>

4
ขอบคุณ! พบสิ่งนี้ในเอกสารที่นี่: docs.docker.com/userguide/dockerlinks/ซึ่งมันบอกว่าNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young

มีวิธีระบุพอร์ตในไฟล์กำหนดค่าหรือไม่? ตัวอย่างเช่นการใช้ตัวเลือก--env-file?
Giovanni Bitliner

8
@GiovanniBitliner ฉันยังค่อนข้างใหม่กับสิ่งนี้ แต่ฉันค่อนข้างแน่ใจว่าคุณจะกำหนดพอร์ตใน Dockerfile ด้วยEXPOSEแล้วดำเนินการdocker run -P(หมายเหตุตัวพิมพ์ใหญ่) ซึ่งจะเปิดเผยพอร์ตทั้งหมดที่กำหนดโดยอัตโนมัติด้วย EXPOSE ใน Dockerfile
Ted Avery

หลายพอร์ตสามารถหยุดกระบวนการเริ่มต้นภายใต้เซอร์วิสไฟล์ systemd หรือไม่
Lanti

1
ผมคิดว่าคำที่ถูกต้องที่นี่ก็คือไม่ได้publish expose
tgogos

291

ขั้นตอนที่ 1

ในของDockerfileคุณคุณสามารถใช้กริยาEXPOSEเพื่อแสดงหลายพอร์ต
เช่น

EXPOSE 3000 80 443 22

ขั้นตอนที่ 2

Dockerfileแล้วคุณต้องการที่จะสร้างภาพใหม่บนพื้นฐานดังกล่าวข้างต้น
เช่น

docker build -t foo:tag .

ขั้นตอนที่ 3

จากนั้นคุณสามารถใช้-pเพื่อทำแผนที่พอร์ตของโฮสต์ที่มีพอร์ตภาชนะที่กำหนดไว้ในข้างต้นของEXPOSE เช่นDockerfile

docker run -p 3001:3000 -p 23:22

ในกรณีที่คุณต้องการแสดงพอร์ตต่อเนื่องหลายช่วงคุณสามารถเรียกใช้ตัวเทียบท่าดังนี้:

docker run -it -p 7100-7120:7100-7120/tcp 

18
EXPOSE เป็นเอกสารสำหรับพอร์ตที่เผยแพร่และมีประโยชน์สำหรับการลิงก์เท่านั้น รายการพอร์ตที่สมบูรณ์สามารถพบได้โดยใช้ -P และพอร์ตเหล่านั้นจะถูกแม็พกับพอร์ตที่มีอยู่โดยอัตโนมัติบนโฮสต์
Arun Gupta

4
ไม่จำเป็นต้องเปิดเผย ลบขั้นตอนแรกหรือทำให้เป็นทางเลือก
AmirHossein

27

ถ้าคุณใช้docker-compose.ymlไฟล์:

services:
    varnish:
        ports:
            - 80
            - 6081

คุณยังสามารถระบุโฮสต์ / เครือข่ายพอร์ต

varnish:
    ports:
        - 80:80
        - 6081:6081

0

หากคุณกำลังสร้างคอนเทนเนอร์จากอิมเมจและต้องการแสดงหลายพอร์ต (ไม่เผยแพร่) คุณสามารถใช้คำสั่งต่อไปนี้:

นักสร้างสร้าง - ชื่อ - container nameรวบรวม 7000 - รวบรวม 7001image name

ตอนนี้เมื่อคุณเริ่มคอนเทนเนอร์นี้โดยใช้docker startคำสั่งพอร์ตที่กำหนดไว้ด้านบนจะถูกเปิดเผย

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