无法从 docker 映像连接到 HTTPS (443)

Posted

技术标签:

【中文标题】无法从 docker 映像连接到 HTTPS (443)【英文标题】:Cannot connect to HTTPS (443) from a docker image 【发布时间】:2016-03-23 00:33:10 【问题描述】:

我在新的专用服务器上安装了 docker(在通用 ubuntu 14.0 - linux 内核 3.13.0-71 上)。 我安装了一个 ubuntu docker 镜像来测试环境。 ( docker run -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 连接有关。 这里有人对这个问题有任何想法吗?

谢谢

【问题讨论】:

您能否从您的主机系统建立到 Google(或任何地方)的 SSL 连接?这可能是防火墙问题吗? 是的,如果我使用来自主机系统的命令 curl google.com,我会收到一个有效的 html 内容 【参考方案1】:

我找到了问题的根源。这里与主主机的 iptables 问题有关

使用命令iptables -L -t nat 我发现所有重定向到端口 9092 的 https 流量都激活了预路由,并被另一个服务使用。

【讨论】:

【参考方案2】:

我遇到了同样的问题。我发现将 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 内再次工作。

希望这会有所帮助。

【讨论】:

【参考方案3】:
echo ipv4 >> ~/.curlrc

在终端上运行此命令。它对我有用

【讨论】:

以上是关于无法从 docker 映像连接到 HTTPS (443)的主要内容,如果未能解决你的问题,请参考以下文章

Docker - 无法连接到正在运行的映像

无法使用 Spring Boot 应用程序连接到 Docker 映像

initctl:无法连接到 Upstart:无法连接到套接字 /com/ubuntu/upstart:docker 映像中的连接被拒绝

构建 docker-compose 映像时无法连接到 MySQL

在 dockerized 环境中无法从 Flask 连接到 Kafka

如何从我的 springboot 应用程序的 Docker 映像连接到 Amazon RDS 实例?