如何从宿主机获取 Docker 容器的 IP 地址?

docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} IPv4={{$net.IPAddress}} IPv6={{$net.GlobalIPv6Address}}{{println}}{{end}}' 容器名 即可拿到容器 IP;地址取决于网络驱动和 IPAM,host/none 模式没有独立桥接 IP。本文给出命令与常见网络场景。

最佳实践
如何从宿主机获取 Docker 容器的 IP 地址?封面

一条命令:docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} IPv4={{$net.IPAddress}} IPv6={{$net.GlobalIPv6Address}}{{println}}{{end}}' <容器名或ID>,直接输出容器在其 Docker 网络中的 IP 地址。地址取决于网络驱动/IPAM,host/none模式没有独立桥接IP,IPv4/IPv6也需分别检查(来自该网络的子网池),多网络容器要按网络名取。

基本命令

docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} IPv4={{$net.IPAddress}} IPv6={{$net.GlobalIPv6Address}}{{println}}{{end}}' myapp
# 输出示例:bridge IPv4=172.17.0.3 IPv6=

PowerShell使用单引号避免模板中的$被解释:

docker inspect -f '{{range $name, $net := .NetworkSettings.Networks}}{{$name}} IPv4={{$net.IPAddress}} IPv6={{$net.GlobalIPv6Address}}{{println}}{{end}}' myapp

容器接了多个网络

docker compose 项目常把容器接进多个网络,先看有哪些:

docker inspect -f '{{json .NetworkSettings.Networks}}' myapp | python3 -m json.tool

取指定网络的 IP:

docker inspect -f '{{with index .NetworkSettings.Networks "myapp_default"}}{{.IPAddress}}{{end}}' myapp

重要提醒:容器 IP 不稳定

  1. 重建可能变化:容器删除重建后 IP 重新分配,不要把 IP 写死进配置
  2. 服务间通信用服务名:同一 compose 网络内用服务名(Docker 内置 DNS),比 IP 可靠得多
  3. 从外部访问用端口映射:docker run -p 8080:80,外部走宿主机 IP+端口,而不是容器 IP

什么时候真的需要容器 IP

  • 排查网络连通性(ping、telnet 容器IP 端口)
  • 写防火墙/路由规则调试
  • 与没用 Docker DNS 的外部系统对接(临时)

常见问题(FAQ)

Q:为什么 inspect 出来 IP 是空的?
A:容器用 host 网络模式时没有独立 IP(共享宿主机网络),或容器已停止。

Q:宿主机上能直接 ping 通容器 IP 吗?
A:原生Linux宿主常有到网桥路由,但仍取决于网络驱动、防火墙与ICMP支持;Mac/Windows 的 Docker Desktop 因虚拟机隔离,宿主机 ping 不通容器 IP,要走端口映射。

Q:容器之间能用 IP 直连吗?
A:同一用户自定义网络内可以,但推荐用容器名/服务名,IP 可能随重建变化,且TCP服务连通性不能仅用ping判断。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台