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

无法从Docker宿主机curl访问容器内Nexus服务的问题求助

问题分析与解决建议

针对宿主机无法访问自身映射的Nexus服务问题,结合你的环境配置,可按以下方向排查:

1. 开启自定义Docker桥接网络的Hairpin模式

你使用了自定义bridge网络docker_network,默认情况下该网络的hairpin模式可能未开启,导致宿主机通过容器绑定的外部/内部IP访问时,数据包无法正确回流到容器。

操作步骤:

  • 检查当前网络的hairpin配置:
docker network inspect docker_network | grep -i hairpin
  • 若未开启,执行以下命令更新网络配置:
docker network update --opt com.docker.network.bridge.enable_hairpin=true docker_network
  • 重启Nexus容器生效:
docker-compose restart nexus

2. 检查宿主机端口占用情况

确认宿主机91端口是否仅被Docker代理进程监听,避免端口冲突导致访问异常:

ss -tulpn | grep ":91"

若输出中有非docker-proxy的进程占用91端口,需停止对应进程或修改Nexus的端口映射。

3. 验证Docker的iptables转发规则

检查Docker自动生成的DOCKER链是否包含正确的端口转发规则:

iptables -L DOCKER -n -v

应能看到类似以下的规则(对应91端口转发到容器的8081端口):

ACCEPT     tcp  --  0.0.0.0/0            172.1.0.2           tcp dpt:91

若缺少该规则,可重启Docker服务重建规则:

systemctl restart docker

4. 排查宿主机路由走向

当宿主机访问INTERNAL_ADDRESS:91时,确认数据包是否走Docker桥接网络而非物理网卡:

ip route get INTERNAL_ADDRESS

若输出显示走物理网卡(如eth0)而非docker_network桥,需检查宿主机路由表,确保自定义Docker网络的路由优先级正确。

5. 确认Nexus服务的绑定范围

进入容器内部,验证Nexus是否绑定了容器内的所有IP(而非仅特定IP):

docker exec -it nexus curl -v localhost:8081

若容器内访问正常,说明Nexus服务本身无问题;若容器内也无法访问,需检查Nexus的配置文件(/nexus-data/etc/nexus.properties)中application-host参数是否设置为0.0.0.0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:40:06