You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Registry服务的本地Docker IP?容器间访问异常排查

问题解答:Docker Registry本地IP查找与容器间访问故障分析

一、查找Registry服务的本地Docker IP

有几种快速获取Registry容器IP的方法:

  • 使用docker inspect直接查询:
    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' registry
    
  • 进入Registry容器内部查看IP:
    docker compose exec registry hostname -i
    
  • 查看compose专属网络的详细信息(以你的foo_default网络为例):
    docker network inspect foo_default | jq '.[].Containers | to_entries[] | "\(.key): \(.value.IPv4Address)"'
    

二、容器间访问失败的原因分析

从你的测试结果来看,问题出在端口使用和通信逻辑上:

  1. curl registry失败:未指定端口时,curl默认访问80端口,但Registry容器内部监听的是5000端口,因此连接被拒绝。
  2. curl registry:5100失败:5100是宿主机的映射端口,容器间通信不需要经过宿主机端口转发,应直接使用容器内部暴露的5000端口。ports: - 5100:5000的作用是将宿主机5100端口映射到容器5000端口,仅用于外部(宿主机或非compose网络的容器)访问。
  3. curl 172.21.0.1:5100成功:172.21.0.1是foo_default网络的网关IP,指向宿主机,你实际是通过宿主机转发访问到Registry容器,但这不是容器间通信的最优方式。

三、正确的容器间访问方式

在同一个Docker Compose网络(foo_default)内,test容器可通过两种方式正常访问Registry:

  1. 使用服务名+容器内部端口(推荐,服务名会自动解析到容器IP):
    curl registry:5000/v2/_catalog
    
  2. 使用Registry容器的实际IP+5000端口:
    比如查到Registry的IP是172.21.0.2,执行:
    curl 172.21.0.2:5000/v2/_catalog
    

补充说明

Docker Compose默认会为所有services创建专属网络,网络内的容器可直接通过服务名互相访问,无需手动配置IP。容器间通信使用容器内部端口,宿主机映射端口仅用于外部访问场景。

内容的提问来源于stack exchange,提问作者Patrick Kwok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:43