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

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名 即可拿到容器 IP;容器在哪个网络就有哪个网段的 IP。本文给出命令与常见网络场景。

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

一条命令:docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名或ID>,直接输出容器在其 Docker 网络中的 IP 地址。容器接入的每个网络都会分配一个 IP(来自该网络的子网池),多网络容器要按网络名取。

基本命令

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myapp
# 输出示例:172.17.0.3

Windows PowerShell 里换成双引号:

docker inspect -f "{{range.NetworkSettings.Networks}}{{.IPAddress}}{{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

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

观测云对照

动态 IP 环境下用标签而非 IP 做检索。 容器 IP 漂移是常态,观测云按容器名、镜像、Pod 等元数据打标,日志与指标按标签聚合查询,IP 变化不影响检索与告警规则。

常见问题(FAQ)

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

Q:宿主机上能直接 ping 通容器 IP 吗?
A:Linux 默认可以(同网桥);Mac/Windows 的 Docker Desktop 因虚拟机隔离,宿主机 ping 不通容器 IP,要走端口映射。

Q:容器之间能用 IP 直连吗?
A:同一用户自定义网络内可以,但推荐用容器名/服务名,IP 会随重建变化。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台