pycharm 遠端除錯docker 中的Python指令碼
一、遠端伺服器以及docker配置ssh
1 原理
將docker中的ssh埠22對映到伺服器中的某一個埠,例如9999,本地使用docker的使用者名稱和密碼登入9999埠,也就登入了相應的docker
2 ssh配置步驟
- 執行docker映象,並且指定相應的埠對映關係
NV_GPU=5 nvidia-docker run -ti --name my_tensorflow1.9_py3 -v ~/dataShare:/home/dataShare -p 9999:22 192.168.12.23:5000/tensorflow1.4:18.01-py2 /bin/bash
這裡指定了容器執行後,將容器的埠22對映到伺服器的埠9999。
- 在遠端伺服器以及daocker中分別安裝ssh服務,openssh-server
sudo apt-get install openssh-server
- 在docker中配置ssh服務
#允許使用root身份登入docker
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
#下面這一步可能沒有許可權,可以自己開啟相應的檔案,將"export VISIBLE=now"寫入/etc/profile的最後一行
echo "export VISIBLE=now" >> /etc/profile
- 重啟ssh服務
service ssh restart
- 在伺服器中測試埠對映
#檢視自己的docker container埠22所對映的伺服器埠
docker port my_tensorflow1.9_py3 22
#如果對映成功,可以看到如下輸出
0.0.0.0:9999
- 在本地測試ssh登入docker container
#如果本地是windows,可以下載git,使用git bash測試 ssh <username>@<server IP> -p 9999
如果上面的ssh配置失敗,可以檢視防火牆是否禁用了相應埠。
3 本地pycharm配置
-
選擇Tools->Deployment->Configuration,增加SFTP伺服器
-
點選左上角加號,輸入server name,以及選擇Type為SFTP
-
按照自己伺服器地址、對映埠、docker使用者名稱密碼進行相應設定
-
選擇Mapping選項卡,配置本地、遠端,對應專案路徑的對映
-
配置遠端專案以及本地專案的同步
選擇Tools->Deployment->Automatic Upload(always)
這樣就可以隨時使用ctrl+s來進行本地專案修改和遠端docker中專案的自動同步 -
配置遠端編譯器
File->Settings->Project:your project name->Project Interpreter
選擇Add Interpreter
選擇SSH Interpreter,右邊視窗選擇Existing server configuration,選擇已經配置好的遠端伺服器即可。接下來會有兩個選項Create和Move,選擇Move即可
-
對映本地專案路徑和對應的伺服器專案路徑
-
到這一步幾乎已經完成了遠端除錯docker的所有配置,但是如果你現在就開始甩開鍵盤慶祝的話,就有點早了。執行基於GPU的TensorFlow專案時,會出現錯誤 ImportError:libcuda.so.1: cannot open shared object file: No such file or directory
- 解決辦法
選擇Run->Edit Configurations->點選加號->選擇python->找到專案執行主檔案增加環境變數LD_LIBRARY_PATH=/usr/local/cuda/lib64。這裡要檢視自己docker中對應的路徑,使用命令如下:
- 解決辦法
echo $LD_LIBRARY_PATH
然後設定相應的路徑即可