我正在尝试使用内置的 Golang 调试 delve 将我自己的调试版本 Golang 应用程序容器化。这是我如何在本地调试我的 Golang 应用程序,它是一个非常简单的 RSS 阅读器。它从我感兴趣的 RSS 提要中检索数据。
$on my local terminal$ dlv debug parsedata-xml-fp.go # launch my app with delve
Type 'help' for list of commands.
(dlv) b main
Command failed: Location "main" ambiguous: main.main, runtime.main…
(dlv) b main.main
Breakpoint 1 set at 0x760252 for main.main() ./parsedata-xml-fp.go:50
(dlv) c
> main.main() ./parsedata-xml-fp.go:50 (hits goroutine(1):1 total:1) (PC: 0x760252)
=> 50: func main() {
51: // [decode from response.Body]
52: url := "https://foreignpolicy.com/feed/"
53:
54: var URLset Rss
55: if xmlBytes, err := getXML(url); err != nil {
(dlv) l
> main.main() ./parsedata-xml-fp.go:50 (hits goroutine(1):1 total:1) (PC: 0x760252)
=> 50: func main() {
51: // [decode from response.Body]
52: url := "https://foreignpolicy.com/feed/"
53:
54: var URLset Rss
55: if xmlBytes, err := getXML(url); err != nil {
(dlv)
在我的本地机器上,我可以设置断点并进入我感兴趣的函数。
我试图在我建造的容器内做同样的事情。
选项 #1: 下面是我的容器的 Dockerfile
#Dockerfile.dlv
FROM golang:1.17 AS build
WORKDIR /
COPY go/app/parsedata-xml-fp.go .
COPY go.mod .
COPY go.sum .
RUN go install github.com/go-delve/delve/cmd/dlv@latest
RUN go build -gcflags="all=-N -l" -o /feedme
RUN echo $(ls /go/bin)
# stage 2 build
FROM ubuntu:18.04
WORKDIR /
EXPOSE 2345
COPY --from=build /go/bin/dlv /dlv
COPY --from=build /feedme /feedme
COPY --from=build /parsedata-xml-fp.go /parsedata-xml-fp.go
CMD ["/dlv", "--listen=:2345", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/feedme"]
当启动我的容器并登录时,出现错误:
exec: "go": executable file not found in $PATH
函数式编程
相关分类