在Docker容器主机上运行golang应用程序时,获取net / http:TLS握手超时

这是我的代码:

func Login(w http.ResponseWriter, r *http.Request) { fmt.Println("Login prccessing") email := r.FormValue("email") password := r.FormValue("password") fmt.Println(email + password) var netTransport = &http.Transport{ Dial: (&net.Dialer{ Timeout: 50 * time.Second, }).Dial, TLSHandshakeTimeout: 50 * time.Second, } var netClient = &http.Client{ Timeout: time.Second * 50, Transport: netTransport, } res, err := netClient.Get("https://account.sloppy.zone/accounts/" + email) if err != nil { fmt.Println(err.Error()) http.Redirect(w, r, "/", http.StatusSeeOther) } responeData, errs := ioutil.ReadAll(res.Body) fmt.Println(string(responeData)) if errs != nil { log.Fatal(errs) } var info LoginInfo json.Unmarshal(responeData, &info) if email == info.Id && password == info.Password { http.Redirect(w, r, "/manager", http.StatusSeeOther) } else { http.Redirect(w, r, "/", http.StatusSeeOther) } } 

我试图运行与docker集装箱化的服务,并将其部署在docker容器主机(sloppy.io)上,并且此服务调用另一个服务(帐户服务)从该服务获取帐户和密码,并使用相同的用户inputvalidation它们主机。问题是当我login到我的网页,然后502坏网关显示up.Track日志我看到错误:TLS握手超时。

我该如何解决这个问题?

由于golang应用程序依赖于帐户服务,因此您应该在设置中定义此依赖项,并使用docker的networkingfunction来连接这两个服务。 这样做也将使您能够将任意数量的实例运行为Docker群或在另一个可伸缩群集基础架构(如sloppy.io)中运行。

这也有一个好处,你不需要公开你的后端(账户服务)。

您可以使用docker-compose或sloppy.io的命令行界面来构build和运行您的应用程序。 懒散的configuration文件与docker-compose.yml文件非常相似。 请参阅http://kb.sloppy.io/features/connecting-containers

这是一个示例configuration为sloppy.yml

 version: "v1" project: "myproject" services: frontend: golang_service: dependencies: - "../backend/account_service" domain: "//my_golang_service.sloppy.zone" env: - ACCOUNT_HOST: "account_service.backend.myproject" image: "dockerhub_username/golang_service:1.0.0" port: 80 backend: account_service: image: "dockerhub_username/account_service:1.0.0" 

这只是涵盖基本configuration。 您可能需要添加卷和环境variables。 如果你已经有一个docker-compose.yml,你可以使用sloppose( github.com/sloppyio/sloppose )将它转换为sloppy.yml。

都是在sloppy.io上运行的服务?