【发布时间】:2016-09-27 08:57:10
【问题描述】:
使用 Docker 1.12.1,我在尝试访问使用 ssh -R 创建的主机端口时遇到了一种奇怪的行为。
基本上,我尝试从运行在服务器上的 docker 容器访问在本地计算机上的端口 12345 上运行的服务。
我打开了一个与ssh -R *:12345:localhost:12345 user@server 的ssh 连接以在server 上打开一个端口12345,该端口转发到我本地计算机上的端口12345。
现在,当我在容器内尝试curl https://172.17.42.1:12345(172.17.42.1 是从 docker 容器访问 docker 主机的 IP)时,我得到:
root@f6873fe1109b:/# curl https://172.17.42.1:12345
curl: (7) Failed to connect to 172.17.42.1 port 12345: Connection refused
但是在server 命令curl http://localhost:12345 成功(例如,没有连接被拒绝)
server$ curl http://localhost:12345
curl: (52) Empty reply from server
我不太明白使用 ssh 完成的端口绑定与在服务器上使用 nc 进行的测试有何不同(它有效):
# on server
nc -l -p 12345
# inside a container
root@f6873fe1109b:/# curl http://172.17.42.1:12345
curl: (52) Empty reply from server
注意:容器以 docker run -it --rm maven:3-jdk-8 bash 启动。
如何让我的容器访问与 ssh 绑定对应的主机端口?
【问题讨论】:
-
默认情况下 ssh -R 打开的端口只绑定到 localhost - 你需要使用
-R '*:11443:server1:443'让它绑定到其他接口上 -
感谢您的建议,但似乎并没有奏效。我仍然看到
curl: (7) Failed to connect to 172.17.42.1 port 11443: Connection refused -
我对您问题中的内容布局感到有些困惑。听起来你正在尝试做accessing host port from inside a container,所以这个答案在这种情况下可能会有所帮助,但我不是 100% 确定。
-
我看到了这个问题/答案,但没有帮助。我试图简化我的问题。 PTAL。再次感谢。
-
ack,我刚刚意识到你正在使用
-R,它绑定了server上的监听,而你想要的-L绑定了你的系统'正在 ssh-ing 来自。如果您使用-L,那么它应该可以正常工作