将端口暴露至Docker容器时出现连接拒绝问题排查
问题原因及解决方案
核心问题分析
expose指令误用:你在docker-compose里添加的expose: - "9100"完全无效——这个指令仅用于声明容器内部开放的端口,而你要访问的是宿主机上被autossh转发的9100端口,和容器内部端口无关联。- autossh转发的绑定范围限制:默认情况下,autossh本地端口转发只会绑定宿主机的
127.0.0.1(仅允许本地回环访问),而容器通过host.docker.internal访问的是宿主机的Docker网桥IP(比如你看到的172.17.0.1),这个IP并未被autossh绑定9100端口,因此会出现连接拒绝。
解决步骤
1. 修改autossh转发命令,绑定所有网卡
将你的autossh转发命令调整为:
autossh -L 0.0.0.0:9100:localhost:9100 user@你的远程服务器地址
0.0.0.0表示让宿主机的所有网卡IP都监听9100端口,包括Docker网桥可访问的IP。
2. 清理docker-compose的无效配置
删除expose: - "9100"这一行,该配置对当前场景没有任何作用。
3. 重启服务验证
- 重启autossh进程
- 重启Prometheus容器:
docker-compose restart prometheus - 进入容器再次执行:
wget http://host.docker.internal:9100/metrics,此时即可正常获取监控指标。
内容的提问来源于stack exchange,提问作者Marvin Ludwig
相关产品推荐
相关产品推荐

