无法从 docker 图片连接到 HTTPS (443)
Cannot connect to HTTPS (443) from a docker image
我在新的专用服务器上安装了 docker(在通用 ubuntu 14.0 - linux 内核 3.13.0-71 上)。
我安装了一个 ubuntu docker 图像来测试环境。 ( docker 运行 -it ubuntu bash ) 并且我安装了支持 openssl 的 curl。
当我尝试获取 HTTP 页面的内容时,没有问题。当我尝试加载 HTTPS 页面时,我的连接被拒绝:
root@835f01fef568:/# curl https://www.google.com
curl: (7) Failed to connect to www.google.com port 443: Connection refused
在详细模式下我有:
root@835f01fef568:/# curl -V https://www.google.com
curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
如果我尝试在文件中记录跟踪,我有:
== Info: Rebuilt URL to: https://www.google.com/
== Info: Hostname was NOT found in DNS cache
== Info: Trying 173.194.123.81...
== Info: connect to 173.194.123.81 port 443 failed: Connection refused
== Info: Trying 173.194.123.84...
== Info: connect to 173.194.123.84 port 443 failed: Connection refused
== Info: Trying 173.194.123.80...
== Info: connect to 173.194.123.80 port 443 failed: Connection refused
== Info: Trying 173.194.123.82...
== Info: connect to 173.194.123.82 port 443 failed: Connection refused
== Info: Trying 173.194.123.83...
== Info: connect to 173.194.123.83 port 443 failed: Connection refused
== Info: Trying 2607:f8b0:4006:80c::1013...
== Info: Immediate connect fail for 2607:f8b0:4006:80c::1013: Network is unreachable
== Info: Failed to connect to www.google.com port 443: Connection refused
== Info: Closing connection 0
我对自己能做的有点迷茫:(
这不是 DNS 问题,因为我可以在端口 80 上 ping 服务器或 CURL http 内容。它只与 SSL 连接有关。
这里有人知道这个问题吗?
谢谢
我找到了问题的根源。这里和主机的一个iptables问题有关
使用命令 iptables -L -t nat
我发现在重定向到端口 9092 的所有 https 流量上都激活了预路由,由另一个服务使用。
我遇到了同样的问题。我发现将 iptables 规则的接口设置为“eth0”而不是“any”可以解决问题。
这是一个在主机上为我工作的例子:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 443 -j DNAT --to-destination 172.17.0.3:8443
一旦接口更改为“eth0”wget https://... 从 docker.
中再次工作
希望对您有所帮助。
echo ipv4 >> ~/.curlrc
运行 终端上的这个命令。它对我有用
我在新的专用服务器上安装了 docker(在通用 ubuntu 14.0 - linux 内核 3.13.0-71 上)。 我安装了一个 ubuntu docker 图像来测试环境。 ( docker 运行 -it ubuntu bash ) 并且我安装了支持 openssl 的 curl。
当我尝试获取 HTTP 页面的内容时,没有问题。当我尝试加载 HTTPS 页面时,我的连接被拒绝:
root@835f01fef568:/# curl https://www.google.com
curl: (7) Failed to connect to www.google.com port 443: Connection refused
在详细模式下我有:
root@835f01fef568:/# curl -V https://www.google.com
curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
如果我尝试在文件中记录跟踪,我有:
== Info: Rebuilt URL to: https://www.google.com/
== Info: Hostname was NOT found in DNS cache
== Info: Trying 173.194.123.81...
== Info: connect to 173.194.123.81 port 443 failed: Connection refused
== Info: Trying 173.194.123.84...
== Info: connect to 173.194.123.84 port 443 failed: Connection refused
== Info: Trying 173.194.123.80...
== Info: connect to 173.194.123.80 port 443 failed: Connection refused
== Info: Trying 173.194.123.82...
== Info: connect to 173.194.123.82 port 443 failed: Connection refused
== Info: Trying 173.194.123.83...
== Info: connect to 173.194.123.83 port 443 failed: Connection refused
== Info: Trying 2607:f8b0:4006:80c::1013...
== Info: Immediate connect fail for 2607:f8b0:4006:80c::1013: Network is unreachable
== Info: Failed to connect to www.google.com port 443: Connection refused
== Info: Closing connection 0
我对自己能做的有点迷茫:( 这不是 DNS 问题,因为我可以在端口 80 上 ping 服务器或 CURL http 内容。它只与 SSL 连接有关。 这里有人知道这个问题吗?
谢谢
我找到了问题的根源。这里和主机的一个iptables问题有关
使用命令 iptables -L -t nat
我发现在重定向到端口 9092 的所有 https 流量上都激活了预路由,由另一个服务使用。
我遇到了同样的问题。我发现将 iptables 规则的接口设置为“eth0”而不是“any”可以解决问题。
这是一个在主机上为我工作的例子:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 443 -j DNAT --to-destination 172.17.0.3:8443
一旦接口更改为“eth0”wget https://... 从 docker.
中再次工作希望对您有所帮助。
echo ipv4 >> ~/.curlrc
运行 终端上的这个命令。它对我有用