Docker容器内Golang发起HTTPS请求出现TLS握手超时问题求助
Docker容器内Golang发起HTTPS请求出现TLS握手超时问题求助
大家好,我碰到了一个困扰许久的问题,想请教下社区的朋友们:
我正在开发一个Golang解析程序,目标站点是https://****.ru/。在本地的Docker容器里运行这个程序时,一切都正常,能顺利完成请求和解析;但把程序部署到服务器的Docker容器中运行时,却反复出现TLS握手超时的错误:
Get "https://***.ru/" net/http: TLS handshake timeout.
我用来发起请求的核心代码如下:
client := &http.Client{ Timeout: 20 * time.Second, Transport: &http.Transport{ TLSHandshakeTimeout: 10 * time.Second, TLSClientConfig: &tls.Config{ MinVersion: tls.VersionTLS12, CipherSuites: []uint16{ tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, // Go 1.8 only tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, // Go 1.8 only tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, }, }, }, } rq, err := http.NewRequest("GET", link, nil) if err != nil { log.Println(err) } res, err := client.Do(rq) if err != nil { log.Fatal(err) }
我已经尝试过几种排查手段:
- 将
TLSClientConfig中的InsecureSkipVerify设为true,跳过证书验证 - 延长
TLSHandshakeTimeout的时长到20秒以上
但这些操作都没有解决问题,错误依然存在。
更奇怪的是,直接在服务器主机上用curl https://***.ru/发起请求,是完全正常的,能快速得到响应,没有任何超时或TLS相关的错误。
有没有朋友遇到过类似的场景?或者能给我一些新的排查思路?非常感谢!
备注:内容来源于stack exchange,提问作者nod




