Docker网络内其他容器无法访问容器的转发端口
问题解决:Docker容器间无法访问SSH转发端口
问题根源
你当前的SSH隧道命令绑定的是127.0.0.1:3306,这个地址仅监听容器A的回环接口,只接受来自容器A内部的连接请求。同一Docker网络内的容器B是通过容器A的内网IP(如172.17.0.5)发起连接,属于外部请求,因此被拒绝。
解决方案
修改SSH隧道命令,将监听地址改为0.0.0.0,让端口接受来自所有网络接口的连接:
ssh -4 -NL 0.0.0.0:3306:127.0.0.1:3306 "${SSH_USER}@${MONOLITH_IP}"
验证修改效果
- 在容器A内执行
netstat -lnt,确认监听地址变为0.0.0.0:3306:
netstat -lnt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
- 在容器B内执行
telnet A 3306,此时应该能正常建立连接。
额外安全建议
若仅需Docker网络内的容器访问该转发端口,可将监听地址指定为容器A的内网IP(如172.17.0.5),而非0.0.0.0,进一步缩小访问范围,降低暴露风险:
ssh -4 -NL 172.17.0.5:3306:127.0.0.1:3306 "${SSH_USER}@${MONOLITH_IP}"
内容的提问来源于stack exchange,提问作者Illya Skidanov
相关产品推荐
相关产品推荐

