Mac için Docker beta kullanarak konteynerimin IP numarası nedir?


28

Daha önce Docker araç setini kullanıyordum ve docker-machine inspect <machine-name>içindeki konteyner tarafından sunulan sayfaları görüntülemek için docker makinesinin IP'sini bulmak için kullanabiliyordum .

Docker beta istemcisine (mac için) yükselttim ve sayfaların nerede sunulduğunu bulamıyorum.

Docker saf olduğundan ve docker makinesi olmadığından, yerel ana bilgisayardaki açık portları göreceğimi farz ediyorum. Fakat açık değiller. Kitematikten bile maruz kalan porta (80) gidiyorum ama hiçbir şey göremiyorum.

$ 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 gerçekten kabımın IP adresi midir? Değilse IP'nin ne olduğunu nereden bulabilirim? Yoksa liman haritalama sorunum mu var?

Yanıtlar:


25

172.17.0.2 olan konteynırın içindeki IP adresine bakıyorsunuz ve docker konteynırlarının yalnızca "içinde" var (ve bunların arasında).

Bağlanmak istediğiniz IP adresi, ana makine makinelerinizin IP adresidir. Mac'inizde bir ifconfig yapın ve doğru olanı bulun (genellikle 192.168.xy veya 10.xyz). Localhost ayrıca kabın dışından da çalışmalıdır.


5
Bunu kim düşürdü emin değilim ama bu aslında doğru cevap. Mac için Docker ile, artık ayrı bir makine IP adresine sahip bir ara VM yok. Ana makineye vurmak (IP veya localhost aracılığıyla), portlar doğru şekilde eşlendiği sürece istekleri kaba iletmelidir.
DNJohnson

Teşekkürler. Bunun neden düşürüldüğü (iki kez) kafam karıştı. Belki de gerçek cevap olmak için çok basit görünüyor çünkü.
Mikael Kjær

Bunu reddetmedim. Ancak, hangi nedenle olursa olsun, bu basit cevabın işe yaramadığı (ya da çalışmayan) bir kullanıcı grubu olduğundan şüpheleniyorum. Doğru olarak işaretliyorum.
Synesso

2
Her şey ilginç bir şey - OS X'te ekran komutuyla xHyve VM'ime gidip curl localhost çalıştırdığımda : 8080 - Konteynerlerden birinden yanıt alıyorum. Ama aynı şeyi OS X terminalinde yaparsam - bağlantı reddedildi. Bu nasıl olabilir?
mvmn

1
PS Bu, liman işçisi tarafından oluşturulmuş bir konteynerin başına geldi.
mvmn

8

Aşağıdaki komutu yazın ve docker container'ınızı ip edin.

$docker inspect <docker-container-name>

Aşağı kaydırın ve " NetworkSettings " altında IP adresini alacaksınız.


Teşekkür ederim. Bunu denedim ve işe yaramadığını söylemeyi ihmal ettim. Sorum güncellendi.
Synesso

Doğru, ama ping yapamazsın. Bu nedenle, yukarıdaki doğru cevabın indirilmemesi nedeniyle şüpheleniyorum. Bana bıraktığım soru, sanal ana bilgisayarda ağa köprü oluşturmanın bir yolu olup olmadığıdır. Sanal ana bilgisayar hala MacOS'a daha iyi entegre olmuşsa hala orada ve bu IP adreslerini oradan pingleyebileceğinizden eminim, ancak bu ağa köprü kurarak böylece Mac'te yerel olarak kullanılabilir durumda mıyım?
Gerry Gleason

6

Mac için Docker, 127.0.0.1 IP adresinde çalışır.


Bu tamamen yanlış bir ifade değildir: P
jonas

Aslında bu, sorunumu çözen en basit cevaptı.
James

1

IP adresi çıktıda açıkça belirtilir 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"}

Ayrıca, localhostaynı değildir0.0.0.0


5
0.0.0.0, geçerli makinedeki tüm ip adresleri anlamına gelir ve genellikle dinlerken kullanılır, bağlanmaz. Yukarıdaki kıvrılmanın nasıl çalıştığını bile anlamıyorum.
Mikael Kjær

2
0.0.0.0, hizmetin konteynerde bağlı olduğu ip adresidir ve onu çalıştıran ana bilgisayar bağlamında hiçbir şey ifade etmez. PORTS sütununun altındaki çıktı, kabın 80 numaralı portunun (0.0.0.0:80) yerel olarak 80 numaralı bağlantı noktasına (80 / tcp) ve yerel olarak 443 numaralı bağlantı noktasına eşlendiğini söylüyor.
Kevin

1
Hayır, aynı değil, ama belirtildiği gibi, 0.0.0.0 bir IP adresi değil, localhost dahil hepsini istediğimi dinlemek için bir işaret. Bağlanma bağlamında, hizmet belirli bir IP'ye (yerel ana bilgisayar veya harici IP) bağlı olmadıkça aynıdır.
Gerry Gleason

0

Ben 127.0.0.1 yerel ev sahibi için olduğuna inanıyorum.

Mac'inizde çalışan docker kimliğini almak için. Terminalde "ifconfig" komutunu çalıştırın ve 127.0.0.1 dışında sonuçta görünmesini sağlayın.

192.168.xy gibi bir şey

Umarım yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.