vscode 调试docker容器的里的go程序

[toc]

vscode 调试docker容器的里的go程序

一. 项目结构

webapp-go
├── Dockerfile
├── edit.html
├── main.go
├── README.md
└── view.html

二. 构建docker镜像

  • Dockerfile 文件
# 基础镜像
FROM golang:latest
# 下载dlv工具
RUN GOPROXY=https://goproxy.cn go get github.com/go-delve/delve/cmd/dlv
# 创建工作目录
RUN mkdir -p /go/src/app
WORKDIR /go/src/app
# 拷贝主机当前文件到工作目录
COPY . /go/src/app
# RUN go build -gcflags "all=-N -l"
# CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log", "--api-version=2" ]
# 默认执行命令
CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log", "--api-version=2"]
  • 构建docker镜像
docker build -t app . 

三. 配置vscode 程序

  • langch.json
{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Launch remote",
            "type": "go", 
            "request": "launch",
            "mode": "remote", // 开启远程模式
            "remotePath": "/go/src/app", // 远端main文件所在目录,必须是绝对路径
            "port": 2345, // dlv服务的暴露端口号
            "host": "192.168.0.250", // dlv服务的ip即docker容器zuo'z
            "program": "${workspaceRoot}",// 本地main文件所在的目录
            "env": {}
        }
    ]
}

四. 启动容器

  • 启动容器
docker run --rm --name webapp --security-opt="seccomp=unconfined" -cap-add=SYS_PTRACE -p 2345:2345 app

必须加 --security-opt="seccomp=unconfined" -cap-add=SYS_PTRACE
否则会报 could not launch process: fork/exec /go/src/app/__debug_bin: operation not permitted 错误

五. 最后愉快的打断点调试

你可能感兴趣的:(vscode 调试docker容器的里的go程序)