[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
错误