Windows 上的 docker linux 容器如何获取其 ip 地址?

Windows 上的 docker linux 容器如何获取其 ip 地址?

docker(Windows)在启动(Linux)容器时是否会分配其 IP 地址,或者该静态信息是否在 /etc/hosts 中预先定义?

在我的例子中,我启动了两个简单的容器,最终得到的地址是 172.17.0.[2|3],而这个地址不在我的 Windows 路由表中(get-netroute|sls 172.17不返回任何内容)。yml 仅定义了一个转发端口,没有 IP 地址信息)

CONTAINER ID        IMAGE       STATUS              PORTS                  
9f22bd3f770b        test-web    Up 26 hours         0.0.0.0:8089->8080/tcp
388dcd1e5dd3        test-db     Up 26 hours         0.0.0.0:3308->3306/tcp

test-web 的 IP 地址为 172.17.0.3

> docker inspect 9f22|sls IPA

            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",

Windows docker 资源网络面板显示“Docker 子网”为 192.168.65.0/28,在 Windows 中也未路由。

文档(https://docs.docker.com/docker-for-windows/networking/) 明确指出 docker0 不能在 Windows 下运行,并且无法对每个容器进行 IP 寻址。它指示使用端口转发

容器上的 ip 地址返回:

> docker exec 9f22 ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
    link/tunnel6 :: brd ::
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

这些容器有任何类型的外部 IP 地址吗?

答案1

您需要从外部主机访问您的容器应用程序吗?

如果您需要从外部访问容器,则可以公开容器端口并将其映射到主机中可用的端口。然后,您可以使用主机 IP:公开端口从外部访问容器

sudo docker run -p 8000:80 镜像:v1

附加链接可能会帮助您进一步理解。 https://nickjanetakis.com/blog/docker-tip-59-difference-between-exposing-and-publishing-ports#:~:text=You%20can%20expose%20a%20port,%2Dp%2080%3A80%20flag

答案2

Docker IP 由 docker 自动分配(除非指定),它们可以被同一主机上运行的其他 docker 容器或进程访问。默认 IP 通常为 172.17.xx,如果您networks在 yml 中设置,IP 将变为 192.168.xx

在您的情况下,172.17.xx 是默认值,我认为它们不是预设的。

相关内容