วิธีรับที่อยู่ IP ของการเรียกใช้ Docker container


96

ฉันใช้ Docker สำหรับ Mac ฉันกำลังเรียกใช้ microservice ที่ใช้ nodejs ในคอนเทนเนอร์ Docker ฉันต้องการทดสอบโหนดไมโครเซอร์วิสผ่านเบราว์เซอร์ วิธีรับที่อยู่ IP ของการเรียกใช้ Docker container?


2
สิ่งนี้ตอบคำถามของคุณหรือไม่? จะรับที่อยู่ IP ของ Docker container จากโฮสต์ได้อย่างไร
sanyassh

คำตอบ:


116

หากคุณไม่ต้องการแมปพอร์ตจากโฮสต์ของคุณไปยังคอนเทนเนอร์คุณสามารถเข้าถึง ip ช่วงนักเทียบท่าสำหรับคอนเทนเนอร์ได้โดยตรง ช่วงนี้เป็นค่าเริ่มต้นที่เข้าถึงได้จากโฮสต์ของคุณเท่านั้น คุณตรวจสอบข้อมูลเครือข่ายคอนเทนเนอร์ได้โดยทำดังนี้

docker inspect <containerNameOrId>

อาจจะดีกว่าที่จะกรอง:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

โดยปกติแล้วช่วงเวลาเริ่มต้นนักเทียบท่า IP 172.17.0.0/16เป็น โฮสต์ของคุณควรเป็น172.17.0.1และคอนเทนเนอร์แรกของคุณควรเป็น172.17.0.2หากทุกอย่างเป็นปกติและคุณไม่ได้ระบุตัวเลือกเครือข่ายพิเศษใด ๆ

แก้ไข อีกวิธีหนึ่งที่หรูหรากว่าโดยใช้คุณสมบัตินักเทียบท่าแทนการ "ทุบตีหลอก":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>

7
คุณกำลังพูดถึง IP ภายในและไม่มีส่วนเกี่ยวข้องกับคำถามในมือ คำตอบของคุณทำให้ผู้อ่านสับสน เนื่องจาก IP เป็น IP ของเครื่องที่ Docker ทำงานอยู่ ซึ่งก็แค่localhost:)
David Gatti

คุณผิด. OP ไม่ได้ระบุอะไรเกี่ยวกับไมโครเซอร์วิสต้องเข้าถึงได้จากภายนอก เขาบอกเพียงว่า "test node microservice ผ่านเบราว์เซอร์" และสามารถทำได้ด้วยวิธีการที่ฉันเสนอโดยใช้http://172.17.0.2:anyPortจากโฮสต์ แน่นอนถ้าคุณต้องการเข้าถึงโดยใช้ localhost บนโฮสต์คุณต้องแมปพอร์ต จะได้เห็นว่า OP ต้องการอะไร.
OscarAkaElvis

3
คุณกำลังบอกว่าคุณสามารถเข้าถึง IP ภายในคอนเทนเนอร์จากโฮสต์ได้หรือไม่? นั่นเป็นไปไม่ได้ทางกายภาพนั่นคือเครือข่ายที่แตกต่างกันอย่างสิ้นเชิง ไม่เพียง แต่ฉันเพิ่งตรวจสอบและใช่ฉันไม่สามารถเข้าถึง 172.17.0.7 ของคอนเทนเนอร์นักเทียบท่าของฉันได้ฉันควรจะสามารถเห็นคู่แข่งนักเทียบท่าทั้งหมดได้หากฉันสแกนเครื่องโฮสต์ของฉันด้วยเครื่องสแกนเครือข่ายและนี่ไม่ใช่กรณี อีกครั้ง. ฉันรู้ว่ามันไม่ควรได้ผลฉันทดสอบสิ่งที่คุณพูด (คุณไม่เคยรู้) และมันไม่ได้ผล ดังนั้นคำอธิบายของคุณอาจขาดส่วนสำคัญหรือไม่?
David Gatti

คอนเทนเนอร์สามารถเข้าถึงได้จากโฮสต์ ลองเอง ... ฉันจะให้คำแนะนำแก่คุณ 1. ดาวน์โหลดภาชนะวิ่ง: docker run --name struts --rm -i tomcat2 รับ IP คอนเทนเนอร์ของคุณ (หากคุณมีเพียงหนึ่ง) docker inspect struts | grep '"IPAddress"' | head -n 13. http://x.x.x.x:8080เปิดบนเบราว์เซอร์ของโฮสต์ คุณสามารถดูหน้าเริ่มต้นของ Apache Tomcat
OscarAkaElvis

1
ฉันไม่สามารถเข้าถึงเว็บแอปในคอนเทนเนอร์โดยไม่มีการแมปพอร์ตโดยใช้ -p
bilal.haider

22

ใช้--formatตัวเลือกเพื่อรับเฉพาะที่อยู่ IP แทนข้อมูลคอนเทนเนอร์ทั้งหมด:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>

4
ในโฮสต์ windows ใช้เครื่องหมายคำพูดคู่แทนอัญประกาศเดี่ยว เช่น sudo docker Inspector --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Reference: link
Vineet Sajwan

1
ข้อมูลรูปแบบใหม่เกี่ยวกับคอนเทนเนอร์ที่นี่
Igor

20

สำหรับเครื่องมือเทียบท่าสมัยใหม่ให้ใช้คำสั่งนี้:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

และสำหรับเครื่องยนต์รุ่นเก่าให้ใช้:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

ดังกล่าวและเชื่อมโยงในความคิดเห็นโดย @sanyash ขึ้นในพื้นที่ OP เดิม
Jesse Chisholm

ข้อผิดพลาดในการแยกวิเคราะห์เทมเพลต: template: 1: การดำเนินการที่ไม่ได้ปิดโดยไม่คาดคิดในคำสั่ง
gmlvsv

11

หากคุณต้องการได้มาภายในคอนเทนเนอร์คุณสามารถลอง

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17

5

คุณสามารถเริ่มคอนเทนเนอร์ของคุณด้วยแฟล็-Pก สิ่งนี้จะ "กำหนด" พอร์ตแบบสุ่มให้กับพอร์ตที่เปิดเผยของรูปภาพของคุณ

ด้วยdocker port <container id>คุณสามารถดูพอร์ตเลือกแบบสุ่ม จากนั้นเข้าถึงได้ผ่านทางlocalhost:port.


2

สำหรับกรณีของฉันด้านล่างทำงานบน Mac :

ฉันไม่สามารถเข้าถึง IP ของคอนเทนเนอร์โดยตรงบน Mac ฉันจำเป็นต้องใช้localhostกับการส่งต่อพอร์ตเช่นถ้าพอร์ตเป็น 8000 แล้วhttp://localhost:8000

ดูhttps://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

คำตอบเดิมมาจาก: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949


-3

คุณไม่สามารถเข้าถึง IP ของนักเทียบท่าจากภายนอกเครื่องโฮสต์นั้น หากเบราว์เซอร์ของคุณอยู่บนเครื่องอื่นควรแมปพอร์ตโฮสต์กับพอร์ตคอนเทนเนอร์โดยส่ง-p 8080:8080คำสั่งไปยัง

การส่งผ่าน-pคุณสามารถแมปพอร์ตโฮสต์กับพอร์ตคอนเทนเนอร์และพร็อกซีถูกตั้งค่าให้ส่งต่อการรับส่งข้อมูลทั้งหมดสำหรับพอร์ตโฮสต์ดังกล่าวไปยังพอร์ตคอนเทนเนอร์ที่กำหนด

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