หมายเลข IP คอนเทนเนอร์ของฉันคืออะไรโดยใช้ Docker beta สำหรับ mac


28

ก่อนหน้านี้ฉันใช้ชุดเครื่องมือ Docker และสามารถใช้docker-machine inspect <machine-name>ค้นหา IP ของเครื่องเทียบท่าเพื่อดูหน้าที่ให้บริการโดยคอนเทนเนอร์ภายใน

ฉันได้อัปเกรดเป็นไคลเอ็นต์รุ่นเบต้าของนักเทียบท่า (สำหรับ mac) และไม่สามารถค้นหาตำแหน่งที่ให้บริการหน้าเว็บได้

ฉันคิดว่าเพราะมันเป็นนักเทียบท่าที่บริสุทธิ์และไม่ใช่นักเทียบท่าเครื่องฉันจะเห็นพอร์ตที่เปิดเผยบน localhost แต่พวกเขาไม่ได้เปิด แม้ผ่าน kitematic ฉันนำทางไปยังพอร์ตที่เปิดเผย (80) แต่ไม่เห็นอะไรเลย

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

172.17.0.2 เป็น IP จริงของคอนเทนเนอร์ของฉันหรือไม่ ถ้าไม่ฉันจะหา IP ได้ที่ไหน หรือฉันมีปัญหาการแมปพอร์ต

คำตอบ:


25

คุณกำลังดูที่อยู่ IP ภายในคอนเทนเนอร์ซึ่งเป็น 172.17.0.2 และมีอยู่เฉพาะ "ข้างใน" ในกล่องเทียบท่า (และระหว่างพวกเขา)

ที่อยู่ IP ที่คุณต้องการเชื่อมต่อคือที่อยู่ IP ของเครื่องโฮสต์ ทำ ifconfig บน Mac ของคุณแล้วหาอันที่ถูกต้อง (ปกติคือ 192.168.xy หรือ 10.xyz) Localhost ควรทำงานจากนอกคอนเทนเนอร์ด้วย


5
ไม่แน่ใจว่าใคร downvote นี้ แต่จริง ๆ แล้วมันเป็นคำตอบที่ถูกต้อง เมื่อใช้ Docker for Mac จะไม่มี VM VM ตัวกลางอีกต่อไปที่มีที่อยู่ IP ของเครื่องแยกต่างหาก การกดปุ่มโฮสต์ (ผ่าน IP หรือ localhost) ควรส่งต่อคำขอไปยังคอนเทนเนอร์ตราบใดที่พอร์ตถูกแมปอย่างถูกต้อง
DNJohnson

ขอบคุณ ฉันสับสนว่าทำไมการลงคะแนนครั้งนี้ถึงสองครั้ง อาจเป็นเพราะมันง่ายเกินไปที่จะเป็นคำตอบที่แท้จริง
Mikael Kjær

ฉันไม่ได้ลงคะแนนนี้ แต่ฉันสงสัยว่ามีกลุ่มผู้ใช้บางส่วนที่ด้วยเหตุผลใดก็ตามคำตอบที่ตรงไปตรงมานี้ไม่ทำงาน (หรือไม่ได้) ฉันทำเครื่องหมายถูกต้อง
Synesso

2
นี่คือสิ่งที่น่าสนใจ - บน OS X เมื่อฉันไปที่ xHyve VM ของฉันผ่านหน้าจอคำสั่งและเรียกใช้ curl localhost: 8080 - ฉันได้รับการตอบสนองจากภาชนะหนึ่ง แต่ถ้าฉันทำเช่นเดียวกันใน terminal X OS - การเชื่อมต่อถูกปฏิเสธ สิ่งนี้จะเกิดขึ้นได้อย่างไร?
mvmn

1
ป.ล. เรื่องนี้เกิดขึ้นกับภาชนะที่สร้างขึ้นโดยนักเทียบท่าเขียน
mvmn

8

พิมพ์คำสั่งต่อไปนี้แล้วคุณจะได้รับ ip container docker ของคุณ

$docker inspect <docker-container-name>

เลื่อนลงและคุณจะได้รับที่อยู่ IP ใต้ " NetworkSettings "


ขอขอบคุณ. ฉันไม่สนใจที่จะพูดถึงว่าฉันได้ลองทำสิ่งนี้แล้ว แต่ก็ไม่ได้ผล คำถามของฉันได้รับการปรับปรุง
Synesso

ใช่ แต่คุณไม่สามารถ ping ได้ ฉันสงสัยว่านี่คือเหตุผลที่คำตอบที่ถูกต้องข้างต้นถูกลดระดับลง คำถามที่ฉันทิ้งไว้คือมีวิธีเชื่อมโยงเครือข่ายในโฮสต์เสมือนหรือไม่ โฮสต์เสมือนยังคงมีอยู่ถ้ารวมเข้ากับ MacOS ได้ดีขึ้นและฉันแน่ใจว่าคุณสามารถ ping ที่อยู่ IP เหล่านี้ได้จากที่นั่น แต่ฉันไม่สามารถเชื่อมโยงไปยังเครือข่ายนั้นได้เพื่อให้สามารถใช้งานได้บน Mac
Gerry Gleason

6

Docker สำหรับ Mac ทำงานบนที่อยู่ IP 127.0.0.1


นี่ไม่ใช่คำเท็จทั้งหมด: P
jonas

อันที่จริงนี่เป็นคำตอบที่ตรงไปตรงมาที่สุดที่แก้ไขปัญหาของฉัน
James

1

ที่อยู่ IP docker psเป็นที่กล่าวถึงอย่างชัดเจนในการส่งออกไปยัง

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

นอกจากนี้localhostไม่เหมือนกัน0.0.0.0


5
0.0.0.0 หมายถึงที่อยู่ ip ทั้งหมดในเครื่องปัจจุบันและมักใช้เมื่อฟังไม่ใช่การเชื่อมต่อ ฉันไม่เข้าใจว่า curl ด้านบนจะทำงานได้อย่างไร
Mikael Kjær

2
0.0.0.0 คือที่อยู่ IP ที่บริการถูกผูกไว้กับในคอนเทนเนอร์และไม่มีความหมายอะไรในบริบทของโฮสต์ที่ใช้งาน เอาต์พุตภายใต้คอลัมน์ PORTS กำลังบอกว่าพอร์ตของคอนเทนเนอร์ 80 (0.0.0.0:80) ถูกแมปกับพอร์ต 80 ในเครื่อง (80 / tcp) เช่นเดียวกับพอร์ต 443 ภายในเครื่อง
เควิน

1
ไม่มันไม่เหมือนกัน แต่อย่างชัดเจน 0.0.0.0 ไม่ใช่ที่อยู่ IP มันเป็นสัญญาณที่ฟังว่าฉันต้องการทั้งหมดรวมถึง localhost ในบริบทของการเชื่อมต่อพวกเขาจะเหมือนกันเว้นแต่ว่าบริการจะถูกผูกไว้กับ IP เฉพาะ (localhost หรือ IP ภายนอก)
Gerry Gleason

0

ฉันเชื่อว่า 127.0.0.1 สำหรับ localhost

วิธีรับรหัสนักเทียบท่าที่ทำงานบน Mac ของคุณ เรียกใช้ "ifconfig" ในเทอร์มินัลและจะมีในผลลัพธ์นอกเหนือจาก 127.0.0.1

ส่วนใหญ่ชอบ 192.168.xy

หวังว่ามันจะช่วย

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