【问题标题】:Get net/http: TLS handshake timeout when run golang app on docker container host获取 net/http:在 docker 容器主机上运行 golang 应用程序时的 TLS 握手超时
【发布时间】:2017-08-20 20:34:22
【问题描述】:

这是我的代码:

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) 上,该服务调用另一个服务(帐户服务)以从该服务获取帐户和密码并使用用户输入验证它们在同一主机上。问题是当我登录到我的页面时出现 502 Bad Gateway。跟踪记录我看到错误:TLS 握手超时。

我该如何解决这个问题?

【问题讨论】:

  • 你能在容器内 curl account.sloppy.zone 吗?检查它是否可以访问容器内的站点?

标签: ssl docker go


【解决方案1】:

由于您的 golang 应用程序依赖于帐户服务,您应该在设置中定义此依赖项并使用 docker 的网络功能来连接这两个服务。这样做还可以让您以 docker swarm 或在另一个可扩展的集群基础架构(如 sloppy.io)中运行任意数量的实例。

这还有一个好处是您不需要向公众公开您的后端(帐户服务)。

您可以使用 docker-compose 或 sloppy.io 的命令行界面来构建和运行您的应用程序。 Sloppy 配置文件与docker-compose.yml 文件非常相似。见http://kb.sloppy.io/features/connecting-containers

这是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"

这只是基本配置。您可能需要添加卷和环境变量。如果您已经有一个现有的 docker-compose.yml,您可以使用 sloppose (github.com/sloppyio/sloppose) 将其转换为 sloppy.yml。

【讨论】:

    【解决方案2】:

    这两个服务都在 sloppy.io 上运行吗?

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2021-11-14
      • 2020-12-01
      • 2019-01-10
      • 2020-05-14
      • 2018-10-19
      相关资源
      最近更新 更多