[经验]如何优雅的在docker下断点调试debug

纲领

  • 前言
  • 使用
  • 过程
  • 配置
  • 总结

前言

随着docker的普及,现在更多的生产线上的程序都是打包成docker 应用,这样方便环境的隔离,也能提高资源的利用率,不过一旦出了问题,怎么debug就成了一个难题,我可暂时没有学会大神们的pdb debug大法,只会用pycharm 打断点调试,那如何处理呢,pycharm professional (只有这个版本里面有这个功能,社区版是没有的) 有一个remote debug 功能,如果我们使用这个功能,那是不是可以同样套路上docker 应用呢?当然可以,我们姑且将docker 当成一个真实的机器

准备

  • docker
  • pycharm professinal
  • docker-compose
  • ubuntu 16.04 系统

使用

最近我正在改nvidia 官方的一个可视化机器学习的web框架 digits ===> https://github.com/NVIDIA/DIGITS(可以轻松的训练) 本次操作就以它来演示

准备基础镜像

因为官方已经提供了他的官方镜像,所以我们直接拉镜像就可以了

准备debug相关资料

新建一个debug 文件夹

debug_wokong下新建 Dockerfile

准备docker-compose.yml文件

这里,我们将应用的端口暴露出来,宿主机的9999 与虚拟机的22端口绑定在一起了

build debug的镜像

debug_wukong 文件夹下,我们就有如下的文件了

使用命令sudo docker-compose build 耐心等待,这样我们就可以在原来的镜像基础之上生成一个新的可以debug的镜像

进入镜像

debug_wukong文件夹下,使用命令

这样我们就可以顺利的进入docker 的内部环境了,这个时候,当前的bash 已经进入到了docker 内部,我们在开另外一个bash命令窗口,使用命令docker ps -a, 可以方便的看到当前的内容

包括我们当前起的docker 名称

当前状态

这个时候,我们的虚拟机(容器)内部端口22 (ssh) 和宿主机的9999绑定了,内部的应用端口8080和外部的8083绑定在了一起

配置

配置目录

我们使用pycharm打开我们的项目文件,(我这边的文件夹已经改成wukong了),先把菜单栏的

《[经验]如何优雅的在docker下断点调试debug》

如图所示:

  • sftp host : 我们远程debug的host地址,我这里就直接填本地了 127.0.0.1
  • port : 9999 记得我们开放的9999(实际和docker 里面的绑定的22端口了吧)
  • Root path: 映射的地址
  • User name : 我们的用户名
  • Password: 密码也是root (用户名和密码我们都已经在dockerfile里面写好了)

配置python path

菜单栏

《[经验]如何优雅的在docker下断点调试debug》

我们选择右边的”选项图标”,会出现

的选项,我们选择好,然后会出现如下的界面
《[经验]如何优雅的在docker下断点调试debug》

填好我们之前的参数 ,这样就会方便的将我们的环境与远程环境同步,这个时候我们就可以方便的使用remote 的python 编译器执行我们的本地脚本了

同步本地代码到docker内部

《[经验]如何优雅的在docker下断点调试debug》

选择upload 选项,就样就会将本地的代码同步到docker内部环境,以后修改记得同步到远程环境

总结

本次主要从dockerfile的制作,docker-compose 使用,以及pycharm 的配置来介绍我们的一大日常工作中的常用利器,remote debug ,学会这个技能,对于我们的工作还是有不小的帮助的。10.1 国庆节在即,大鱼在这里提前祝大家国庆快乐,出行注意安全。

点赞
  1. 龙哥说道:

    sudo docker-compose build 的时时候,有个连不上啊,还能连其他的不?
    http://developer.download.nvidia.com Release
    The following signatures were invalid: NODATA 1 NODATA 2
    return a non-zero code: 100

    1. bruce说道:

      应该是没有这个image了吧,如果是网速过慢可以考虑给docker 换一个源 https://cn.bing.com/search?q=docker+%E6%8D%A2%E6%BA%90&qs=n&form=QBLH&sp=-1&pq=undefined&sc=0-9&sk=&cvid=1E03FA971B874D1B8AE27AC633FF872D ,如果是没有这个Image可以考虑换同样的base 的不同的版本的image

发表评论

电子邮件地址不会被公开。 必填项已用*标注