当前位置: 首页 > 知识库问答 >
问题:

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

端木安国
2023-03-14

这是我的代码:

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

我该怎么解决这个问题?

共有2个答案

廉元龙
2023-03-14

这两个服务都在sloppy上运行。伊奥?

苍恩
2023-03-14

由于Go语言应用程序依赖于帐户服务,因此应在设置中定义此依赖项,并使用docker的网络功能连接两个服务。这样做还将使您能够以docker群或其他可扩展群集架构体系(如sloppy.io.)运行任意数量的实例

这还有一个优点,即您不需要向公众公开您的后端(帐户服务)。

您可以使用docker-comact或sloppy.io的命令行接口来构建和运行您的应用程序。草率的配置文件与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,你可以把它转换成sloppy。使用sloppose的yml(github.com/sloppyio/sloppose)。

 类似资料:
  • 问题内容: 我正在尝试运行此项目-https://github.com/JumboInteractiveLimited/codetest 我已经下载了Docker工具箱,并执行了GitHub页面上提到的build和run命令,但是当我尝试访问http:localhost:8080时,该页面仍然不可用。 当我尝试再次执行运行时,Docker说 编辑 :澄清一下,我只有在第二次运行时才收到该错误。当我

  • 问题内容: docker-compose文件: 我已在dockerfile中注释掉EXPOSE 4200,因为我已经从docker- compose.yml文件中挂载了它,不是吗,我应该在dockerfile中公开并在docker-compose中挂载吗? 在命令行上运行npm start可以在浏览器中成功启动该应用程序,因为我可以转到该应用程序并查看其运行情况。 但是,如果我使用docker构建

  • 我已经创建了自己的私有注册表(私有注册表),但我无法将图像推送到它。比我得到以下错误: 正在运行的注册表的日志显示以下内容: 我无法卷曲我的注册表(超时)。以下是我执行的步骤: 首先,我创建了自签名证书: 我已创建注册表,它将使用以下证书: 我授予了正确的权限: 我创建了:,并复制了我的在它里面。我编辑了我的并添加了:(我的内部ip和注册表名) 我还重新启动了docker和我的注册表。 编辑:

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

  • 错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”c:\program files\docker toolbox\docker.exe:来自守护进程的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”。

  • 问题内容: 是否可以(直接使用命令或API)从远程主机启动容器? 假设我有两台具有不同体系结构的机器:-A是一台机器-B是一台机器 我想使用我的A机器在B机器上运行一个容器。起初,我认为可以使用以下命令: 但这个命令实际上拉图像,并试图在其中一些最终的机器运行它的原因很明显,你不能运行的图像所特有的一种机器。 机器A和B之间的通信正常。我可以运行诸如或的命令,它可以给我预期的结果: 我听说过并且还