如何使用VSCode在Docker中debuggingGolang应用程序?

我正在学习在Docker中debuggingGolang应用程序。 我在shell中使用dlv connect成功了。 我可以添加断点,继续,下一步…我可以在VSCode中注意到,但正在等待halting

我点击左侧的function主,直到红点。 然后点击绿色button,就像“玩”一样。 程序在容器中运行,但不能停在函数main上。

我以错误的方式使用VSCode吗? 我需要你的帮助。 谢谢。

这是我的钻研形象:

 #Dockerfile FROM supinf/go:1.8-builder RUN apk --no-cache add tini \ && apk --no-cache add --virtual build-dependencies git \ # Compile delve && go get github.com/derekparker/delve/cmd/dlv \ && cd $GOPATH/src/github.com/derekparker/delve \ && go install github.com/derekparker/delve/cmd/dlv \ # Clean up && apk del --purge -r build-dependencies \ && rm -rf /go/src/* ENTRYPOINT ["/sbin/tini", "--"] CMD ["dlv", "-h"] 

docker build -t mydelve .

这是我的golang代码:

 package main import ( "fmt" "sync" "time" ) func dostuff(wg *sync.WaitGroup, i int) { fmt.Printf("goroutine id %d\n", i) time.Sleep(60 * time.Second) fmt.Printf("end goroutine id %d\n", i) wg.Done() } func main() { var wg sync.WaitGroup workers := 10 wg.Add(workers) for i := 0; i < workers; i++ { go dostuff(&wg, i) } wg.Wait() } 

这是CMD运行容器:

 docker run --rm -p 2345:2345 -v $GOPATH/src:/go/src -w /go/src/test/dlv --security-opt seccomp=unconfined mydelve dlv debug --headless --listen=:2345 --log` 

连接到容器

dlv connect 127.0.0.1:2345 --wd . --log

有用。

VSCode

launch.json

 { "version": "0.2.0", "configurations": [ { "name": "Remote", "type": "go", "request": "launch", "mode": "remote", "program": "${fileDirname}", "port": 2345, "host": "127.0.0.1", "env": {}, "args": [] } ] } 

login容器

 $ docker run --rm -p 2345:2345 -v $GOPATH/src:/go/src -w /go/src/test/dlv --security-opt seccomp=unconfined mydelve dlv debug --headless --listen=:2345 --log 2017/05/22 09:07:56 server.go:73: Using API v1 2017/05/22 09:07:56 debugger.go:97: launching process with args: [/go/src/test/dlv/debug] API server listening at: [::]:2345 2017/05/22 09:08:00 debugger.go:505: continuing goroutine id 3 goroutine id 9 goroutine id 4 goroutine id 5 goroutine id 6 goroutine id 7 goroutine id 8 goroutine id 1 goroutine id 0 goroutine id 2 end goroutine id 6 end goroutine id 3 end goroutine id 9 end goroutine id 4 end goroutine id 5 end goroutine id 8 end goroutine id 7 end goroutine id 1 end goroutine id 0 end goroutine id 2 2017/05/22 09:08:10 debugger.go:496: halting 

我认为你需要解决的主要问题是将主机从“127.0.0.1”(localhost)更改为你的容器的IP(上面的launch.json文件的第11行)。 以下是可能有所帮助的文章:

https://blog.intelligentbee.com/2016/12/15/debugging-golang-apps-in-docker-with-visual-studio-code/

据此,“您可能需要将主机IP更改为您的docker-machine ip输出。” 或者,如果您使用的是kubernetes,则可能需要使用“kubectl describe pod”,然后查找“IP:”