ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用pycharm远程调试docker里的python程序

2022-04-13 00:00:06  阅读:262  来源: 互联网

标签:http cn python edu ssh ubuntu pycharm docker


 

 

使用pycharm远程调试docker里的python程序

时间:20210810,版本:0.1,

ROBOTECH_ERX

 

一个放在docker里的python程序,分析一下实现原理,需要搭建调试环境单步调试。镜像是一个ubuntu 16 lts,镜像中的python环境管理使用的是virtualenv+virtualenvwrapper。本地环境是ubuntu20.04lts桌面版.

几种解决方案:

1.使用python命令行的调试器pdb(https://docs.python.org/3/library/pdb.html),在容器里调试分析。但是毕竟感觉不舒服。最好还是在图形界面里一下下的步过比较舒服。

2.把代码和环境完整的复制出来。代码好说,virtualenv环境完整复制出来貌似不好办(virtualenv就不是为了迁移设计的),网上通用的方法是pip freeze打包所有的依赖,但是有的包不是通过pip安装的。

3.远程调试。在有图形ide的环境里调试,使用远程的interpreter和debugger。本地不需要完整的代码(脚本语言的好处)。

第三显然是最好的方案了。

需要的东东:

Pycharm 专业版。社区版不支持远程。Pycharm 专业版是支持docker调试的,但是考虑到以后可能用到其他虚拟机来干同样的事情。这里用远程SSH调试,也就是把docker当成一个远程的服务器在用了。

 

过程:

1.拉取镜像

把项目的 docker image pull下来,使用docker cp命令把docker里的项目代码复制出来作为本地的代码。

2.docker里配置ssh

从镜像启动容器:

$docker run -it  nacknack  bash  #nacknack 是镜像id

 

看一下发行版

$cat /etc/issue

 

是Ubuntu 16.04.6 LTS,把apt的源改成国内源,http的源,https还要安装别的包,网速太慢可能安不上:

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse

 

安装ssh:

$ sudo apt update

$ sudo apt install openssh-server

$ sudo service sshd start

$ ps -aux | grep ssh

$ sudo service sshd status

 

修改ssh的配置文件:vi /etc/ssh/sshd_config

#PermitRootLogin prohibit-password   #这个注释掉,添加下面的两个:

PermitRootLogin yes

PasswordAuthentication yes  #添加

 

然后 重启sshd 服务

$ sudo service sshd reload  //停止进程后重启(推荐)

$ sudo service sshd restart  //干掉进程后重启(不推荐)

 

然后给root账户添加密码

~$ sudo passwd root

3.映射容器端口

刚才直接启动了容器,没有配置端口映射。然后就发现在配置映射有点晚了,容器启动以后没有官方的手段建立映射。Stop容器以后,也没有添加映射的方法。网上有些方法,比如iptable转发,试了没起作用。所以,先commit为镜像,然后重新启动容器。

 

~$ docker commit 6aca nacknack:v-ssh #v-ssh 是标签

sha256:f3e2736826592158da37051fe69e5047e8bb1dc1f7a7651a15c4513ed881f486

 

启动,并映射端口:

~$ docker run -it -p 3004:22 nacknack:v-ssh bash

 

容器里要启动ssh,不会自动启动

~$ sudo service ssh start  (不是sshd。。。)

 * Starting OpenBSD Secure Shell server sshd  [ OK ]

 

测试ssh登录,注意是映射到到了宿主机,不是docker自己的ip,这里是在本机,所以是回环地址。(本机直接ssh 容器ip:22是失败的,没有深究原因)

~$ ssh root@127.0.0.1 -p 3004

 

4.配置pycharm远程调试

下载专业版pycharm,找到下面这个文件,启动(或者做个图标):

~$ sh /mytools/pycharm/pycharm-2020.1/bin/pycharm.sh

 

在pycharm里打开本地的代码文件夹,工程名是XXX。

配置 project的解释器 (file->settings->Project:xxx->Project Interpreter)

选SSH调试器,添加相应的配置,包括服务器的地址、端口和密码。

选择远程机器上的调试器,容器里的项目使用了virtualenv,

$ workon tata     #进入对应的virtualenv环境。

$ which python   #查看环境的解释器地址

/home/tata/.virtualenvs/tata/bin/python #

 

配置好本地和远程代码的映射。(在我这里,有时候配置会不成功,导致调试的时候会显示 找不到文件或目录,配置完了检查一下,不成功就重新配置一下。不需要单独配置deploment和sftp,这里自动就配置了)

 

自动上传那个看情况选取,如果文件太多了,扫描、同步一遍就会卡死。

详细的可以参考:

https://www.jetbrains.com/help/pycharm/2021.2/configuring-remote-interpreters-via-ssh.html

 

然后可以开始欢快的调试了。

 

(注:这里仅仅是为了分析理解而调试程序,生产环境不要这么干)

参考:

 

标签:http,cn,python,edu,ssh,ubuntu,pycharm,docker
来源: https://www.cnblogs.com/robotech/p/16138310.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有