ฉันใช้ Docker สำหรับ Mac ฉันกำลังเรียกใช้ microservice ที่ใช้ nodejs ในคอนเทนเนอร์ Docker ฉันต้องการทดสอบโหนดไมโครเซอร์วิสผ่านเบราว์เซอร์ วิธีรับที่อยู่ IP ของการเรียกใช้ Docker container?
ฉันใช้ Docker สำหรับ Mac ฉันกำลังเรียกใช้ microservice ที่ใช้ nodejs ในคอนเทนเนอร์ Docker ฉันต้องการทดสอบโหนดไมโครเซอร์วิสผ่านเบราว์เซอร์ วิธีรับที่อยู่ IP ของการเรียกใช้ Docker container?
คำตอบ:
หากคุณไม่ต้องการแมปพอร์ตจากโฮสต์ของคุณไปยังคอนเทนเนอร์คุณสามารถเข้าถึง 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>
localhost
:)
http://172.17.0.2:anyPort
จากโฮสต์ แน่นอนถ้าคุณต้องการเข้าถึงโดยใช้ localhost บนโฮสต์คุณต้องแมปพอร์ต จะได้เห็นว่า OP ต้องการอะไร.
docker run --name struts --rm -i tomcat
2 รับ IP คอนเทนเนอร์ของคุณ (หากคุณมีเพียงหนึ่ง) docker inspect struts | grep '"IPAddress"' | head -n 1
3. http://x.x.x.x:8080
เปิดบนเบราว์เซอร์ของโฮสต์ คุณสามารถดูหน้าเริ่มต้นของ Apache Tomcat
ใช้--format
ตัวเลือกเพื่อรับเฉพาะที่อยู่ IP แทนข้อมูลคอนเทนเนอร์ทั้งหมด:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
สำหรับเครื่องมือเทียบท่าสมัยใหม่ให้ใช้คำสั่งนี้:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
และสำหรับเครื่องยนต์รุ่นเก่าให้ใช้:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
หากคุณต้องการได้มาภายในคอนเทนเนอร์คุณสามารถลอง
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
คุณสามารถเริ่มคอนเทนเนอร์ของคุณด้วยแฟล็-P
ก สิ่งนี้จะ "กำหนด" พอร์ตแบบสุ่มให้กับพอร์ตที่เปิดเผยของรูปภาพของคุณ
ด้วยdocker port <container id>
คุณสามารถดูพอร์ตเลือกแบบสุ่ม จากนั้นเข้าถึงได้ผ่านทางlocalhost:port
.
สำหรับกรณีของฉันด้านล่างทำงานบน 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
คุณไม่สามารถเข้าถึง IP ของนักเทียบท่าจากภายนอกเครื่องโฮสต์นั้น หากเบราว์เซอร์ของคุณอยู่บนเครื่องอื่นควรแมปพอร์ตโฮสต์กับพอร์ตคอนเทนเนอร์โดยส่ง-p 8080:8080
คำสั่งไปยัง
การส่งผ่าน-p
คุณสามารถแมปพอร์ตโฮสต์กับพอร์ตคอนเทนเนอร์และพร็อกซีถูกตั้งค่าให้ส่งต่อการรับส่งข้อมูลทั้งหมดสำหรับพอร์ตโฮสต์ดังกล่าวไปยังพอร์ตคอนเทนเนอร์ที่กำหนด