使用Docker beta for mac,我的容器的IP号码是多少?


21

以前我使用的是Docker工具包,可以使用 docker-machine inspect <machine-name> 找到docker机器的IP,以便查看容器内所服务的页面。

我已升级到docker beta客户端(对于mac),无法找到提供页面的位置。

我假设因为它是docker pure而不是docker-machine我会在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是什么?或者我有端口映射问题?

Answers:


20

您正在查看容器内的IP地址172.17.0.2并且仅存在于docker容器内部(以及它们之间)。

要连接的IP地址是主机IP地址。 在Mac上执行ifconfig并找到正确的ifconfig(通常为192.168.x.y或10.x.y.z)。 Localhost也应该在容器外部工作。


3
不知道是谁贬低了这个但实际上是正确的答案。使用Docker for Mac,不再有具有单独机器IP地址的中间VM。只要端口映射正确,命中主机(通过IP或localhost)就应该将请求转发到容器。
DNJohnson

谢谢。我很困惑,为什么这个被投票(两次)。也许是因为它看起来太简单了,不能成为真正的答案。
Mikael Kjær

我没有投票。但我怀疑有一部分用户,无论出于何种原因,这个直截了当的答案都没有(或没有)起作用。我的标记是正确的。
Synesso

2
嗯,这是一个有趣的事情 - 在OS X上,当我通过屏幕命令进入我的xHyve VM并运行curl时 本地主机:8080 - 我收到其中一个容器的回复。但如果我在OS X终端中也这样做 - 连接被拒绝了。怎么会发生这种情况?
mvmn

1
附:这发生在通过docker-compose创建的容器中。
mvmn

7

键入以下命令,您将获得您的docker容器ip

$docker inspect <docker-container-name>

向下滚动,您将获得“ 网络设置


谢谢。我没有提到我试过这个&amp;它不起作用。我的问题已经更新。
Synesso

是的,但你不能ping它。我怀疑这就是为什么上面的正确答案被低估了。我留下的问题是,是否有办法在虚拟主机上桥接到网络。如果更好地集成到MacOS中,虚拟主机仍然存在,我确信你可以从那里ping这些IP地址,但我不能桥接到那个网络,所以它们在Mac上是本地可用的?
Gerry Gleason

4

Docker for 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地址,通常在侦听时使用,而不是连接。我不明白上面的卷曲是如何工作的。
Mikael Kjær

1
0.0.0.0是服务绑定到容器中的IP地址,在运行它的主机的上下文中没有任何意义。 PORTS列下的输出表示容器的端口80(0.0.0.0:80)在本地(80 / tcp)映射到端口80,在本地映射到端口443。
Kevin

1
不,它不一样,但正如所指出的,0.0.0.0不是IP地址,它是一个要监听的信号,我想要所有这些包括localhost。在连接的上下文中,除非服务绑定到特定IP(localhost或外部IP),否则它们是相同的。
Gerry Gleason
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.