登录
首页 >  Golang >  Go问答

在容器上调试 Go 进程不会监听映射端口

来源:stackoverflow

时间:2024-04-06 20:27:33 279浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《在容器上调试 Go 进程不会监听映射端口》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我在 macosx 上使用 goland ide,并尝试调试在容器上运行的应用程序。我正在尝试远程调试,只是容器位于我的本地。 当我在 ide 上运行调试器时,它确实会在断点处停止,但它正在调试的是我的本地上的应用程序,而不是上的应用程序容器

作为背景,我的应用程序应该侦听端口 8000 并返回“hello,visitor!”。 如果我通过 docker 容器编译并运行此文件,映射端口 8000 并通过浏览器或 .http 文件发出请求,我确实会收到此响应。 但是,当我通过 delve 在容器上运行它时,它不会通过浏览器响应。

此外,一旦容器启动,当我在 ide 上启动调试器时,它不会调试容器上的应用程序,因为它会抱怨

2020/08/05 17:57:39 main.go:16: listen tcp :8000: bind: address already in use

我尝试按照这两个教程进行操作,除了使用的 docker 映像版本不同之外,这两个教程大部分都是相同的。

教程1 教程2

我也浏览了这两篇帖子的所有评论,但没有找到任何可以解决我的问题的内容。

这是我的 main.go

package main
import (
    "fmt"
    "log"
    "net/http"
)
func main() {
    // set the flags for the logging package to give us the filename in the logs
    log.setflags(log.lstdflags | log.lshortfile)

    log.println("starting server...")
    http.handlefunc("/", func(w http.responsewriter, r *http.request) {
        w.writeheader(http.statusok)
        _, _ = fmt.fprintln(w, `hello, visitor!`)
    })
    log.fatal(http.listenandserve(":8000", nil))
}

这是我的 dockerfile:

# compile stage
from golang as build-env

# build delve
run git config --global http.sslverify "false"
run git config --global http.proxy http://mycompanysproxy.com:80
run go get github.com/go-delve/delve/cmd/dlv

add . /dockerdev
workdir /dockerdev
run go build -gcflags="all=-n -l" -o /server

# final stage
from debian:buster
expose 8000 40000
workdir /
copy --from=build-env /go/bin/dlv /
copy --from=build-env /server /

cmd ["/dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/server"]

容器成功启动,附加的控制台日志显示:

api server listening at: [::]:40000

但是,它似乎并没有在听。 如果我跑步

get http://localhost:8000/
accept: application/json

我希望它在断点处停止,但事实并非如此。相反,它抱怨:

org.apache.http.NoHttpResponseException: localhost:8000 failed to respond

我错过了什么吗? 这是在容器化应用程序上调用调试器的方法吗?

更多信息:


解决方案


我发现我使用了错误的调试配置。需要按下调试按钮,并在配置中显示远程调试(右上角)。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>