使用goland对docker容器进行远程调试

工欲善其事必先利其器,目前已经搭建好了工作的调试环境,实际使用效果还未知,这里先做一个记录和分享。

环境和工具

本地window10 + goland

远程Centos的服务器,部署centos docker

docker中用delve作为调试器并且使用git管理挂载的项目文件


具体方式为

docker配置

创建docker容器的时候需要挂载文件夹来存放项目文件,之后容器中对这个文件夹进行git的版本管理;同时需要将容器端口关联到服务器主机端口,

以方便本地windows的goland通过远程调试命令通过服务器连接到容器里面的监听调试命令的delve。

    docker run -it --privileged --hostname wzy --name wzy -p 3000:3000  -v /root/wzy/test:/root/wzy/test ubuntu:15.10.3 /bin/bash

delve安装

在docker容器中需要安装用于调试go代码的调试器delve,详细安装步骤参考:

https://github.com/derekparker/delve

上面安装是用GOPATH方式进行安装的,我已经打开GO Module构建项目,安装后dlv命令找不到,所以安装后我直接把GOPATH bin下的dlv二进制文件拷贝进我的PATH相关目录里面。

goland配置

windows下的goland也需要配置,分为两个步骤,首先使用deployment,创建一个SFTP的连接到服务器挂载的项目文件夹,就可以将服务器上的项目代码拉取下来了

右键点击可以同步文件


然后需要创建一个远程调试的配置,配置中连接到服务器和刚才docker匹配的端口就可以了。


调试器配置

注意上面黄色高亮标记的调试命令,这个是在docker里面执行的delve调试命令,意思是在这个端口(需要改成刚才配置的3000)上面进行监听,调试指令由goland这边发送。由于我的delve和go版本不匹配,所以需要在后面添加不要验证版本来强制执行:(不知道会有什么具体影响)

dlv debug --headless --listen=:51234 --api-version=2 --accept-multiclient --check-go-version=false


开始调试

最后,我们返回到docker里面的项目文件路径,编译后执行上面的调试命令,可以看到如下返回,证明docker下已经在监听可能接收到的调试命令了:


我们回到window下,先设置断点,然后对goland启动调试,就是右上角的那个虫子按钮,就可以看到docker返回命中的断点信息了,效果和本地调试一样:

命中断点

这里先点击调试按钮或者先执行docker里面的监听都可以,只要两端端口同步就可以了。

git管理

本地修改完代码后,点击这里的Upload here就可以同步代码到docker啦(其实是同步到Host,不过由于Host和docker挂载了同一个项目文件夹,所以改动也同步到了docker的git里面)

提交代码

你可能感兴趣的:(使用goland对docker容器进行远程调试)