apiv1

举例打包dlv

export DOCKERFILE='
ARG BUILD_IMAGE="golang:alpine"
ARG RUNTIME_IMAGE="alpine:latest"

FROM ${BUILD_IMAGE} AS builder
ARG GOPROXY="https://goproxy.cn,https://goproxy.io,direct"
ARG GO_INSTALL_TARGET="github.com/go-delve/delve/cmd/dlv@latest"
RUN export GOPROXY=${GOPROXY} GO111MODULE=on CGO_ENABLED=0 GOOS=linux; \
  go install ${GO_INSTALL_TARGET};

FROM ${RUNTIME_IMAGE} AS runner
COPY --from=builder /go/bin/* /usr/local/bin/
'

printf "$DOCKERFILE" | docker buildx build -f - . -t dlv

启动调试

dlv --listen=:2345 --headless=true --api-version=2 exec --only-same-user=false ./your-go-program # 等待调试器连接后才运行
dlv --listen=:2345 --headless=true --api-version=2 exec --only-same-user=false --accept-multiclient --continue ./your-go-program # 不等待调试器, 直接运行

附加调试

# 在容器内部的 shell 中
dlv attach <Go-Program-PID> --listen=:2345 --headless=true --api-version=2