使用pycharm遠程調試docker里的python程序


 

 

使用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

 

然后可以開始歡快的調試了。

 

(注:這里僅僅是為了分析理解而調試程序,生產環境不要這么干)

參考:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM