---
# System prepended metadata

title: 使用Pycharm 來Remote Debugging Server Docker

---

# 使用Pycharm 來Remote Debugging Server Docker

## 0.需求情況
* ### 部屬時伺服器的Container Error遠端進去Debug較為方便
* ### Clone他人的docker images，因本機電腦記憶體不夠 於伺服器上運行測試
---
## 1.安裝流程

---
* ### 在遠端伺服器创建docker container
* ### 遠端伺服器的ssh配置
* ### Pycharm與遠端伺服器同步
* ### Pycharm配置遠端伺服器的編譯器
* ### 映射本地文件並開始編譯
---
## 2.準備工作

### 1.Pycharm Professional版
* #### Professional版本才支援SSH連接
```
破解序號：
56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJJSSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJSTSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IldTIiwicGFpZFVwVG8iOiIyMDIwLTAzLTEwIn0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwMjAtMDMtMTAifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjAyMC0wMy0xMCJ9XSwiaGFzaCI6IjEyMjkxNDk4LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-SYSsDcgL1WJmHnsiGaHUWbaZLPIe2oI3QiIneDtaIbh/SZOqu63G7RGudSjf3ssPb1zxroMti/bK9II1ugHz/nTjw31Uah7D0HqeaCO7Zc0q9BeHysiWmBZ+8bABs5vr25GgIa5pO7CJhL7RitXQbWpAajrMBAeZ2En3wCgNwT6D6hNmiMlhXsWgwkw2OKnyHZ2dl8yEL+oV5SW14t7bdjYGKQrYjSd4+2zc4FnaX88yLnGNO9B3U6G+BuM37pxS5MjHrkHqMTK8W3I66mIj6IB6dYXD5nvKKO1OZREBAr6LV0BqRYSbuJKFhZ8nd6YDG20GvW6leimv0rHVBFmA0w==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQAF8uc+YJOHHwOFcPzmbjcxNDuGoOUIP+2h1R75Lecswb7ru2LWWSUMtXVKQzChLNPn/72W0k+oI056tgiwuG7M49LXp4zQVlQnFmWU1wwGvVhq5R63Rpjx1zjGUhcXgayu7+9zMUW596Lbomsg8qVve6euqsrFicYkIIuUu4zYPndJwfe0YkS5nY72SHnNdbPhEnN8wcB2Kz+OIG0lih3yz5EqFhld03bGp222ZQCIghCTVL6QBNadGsiN/lWLl4JdR3lJkZzlpFdiHijoVRdWeSWqM4y0t23c92HXKrgppoSV18XMxrWVdoSM3nuMHwxGhFyde05OdDtLpCv+jlWf5REAHHA201pAU6bJSZINyHDUTB+Beo28rRXSwSh3OUIvYwKNVeoBY+KwOJ7WnuTCUq1meE6GkKc4D/cXmgpOyW/1SmBz3XjVIi/zprZ0zf3qH5mkphtg6ksjKgKjmx1cXfZAAX6wcDBNaCL+Ortep1Dh8xDUbqbBVNBL4jbiL3i3xsfNiyJgaZ5sX7i8tmStEpLbPwvHcByuf59qJhV/bZOl8KqJBETCDJcY6O2aqhTUy+9x93ThKs1GKrRPePrWPluud7ttlgtRveit/pcBrnQcXOl1rHq7ByB8CFAxNotRUYL9IF5n3wJOgkPojMy6jetQA5Ogc8Sm7RG6vg1yow==
```

### 2.Docker
### 3.Container裡面裝openssh-server
```
root@dd53ea4c2f2b:/# apt update && apt install openssh-server
```
---
## 3.遠端伺服器的ssh配置
* 配置在docker container
```
$ sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config  # 允許使用root登入
$ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
$ echo "export VISIBLE=now" >> /etc/profile
```
* 重啟ssh服務
```
service ssh restart
```
* 檢查docker與遠端伺服器的端口映射
```
* # 此操作在遠端伺服器
$ docker port <your container name> 22
# 此操作查看遠端伺服器與container的端口映射

# 輸出結果如下
0.0.0.0:8022
# 表示只要ssh連接遠端伺服器端口8022，實際是連接docker container中的22端口
```

* 檢查是否能用ssh連進去剛剛的container
```
$ ssh root@<你服务器的ip地址> -p 8022
```
---
## 4.Pycharm與遠端伺服器同步
### 1.配置SFTP
* 於Tools>Depolyment>Configuration中配置SFTP。
![](https://i.imgur.com/b9BfUgq.png)

* 配置SFTP，點擊左上角的+號。選擇SFTP，根據自己的實際情況進行配置。
![](https://i.imgur.com/597SlZB.png)

* 配置SFTP中的mapping
![](https://i.imgur.com/H7K8scn.png)

* 開啟自動上傳功能
Tools>Depolyment>Automatic Upload(always)
![](https://i.imgur.com/3SG7L0g.png)

---
## 5.Pycharm配置遠端伺服器的編譯器
* 1.打開pycharm，File->Settings->progect:[你的项目名字]->project interpreter->左上方小齒輪->Add
![](https://i.imgur.com/9hqywx5.png)
* 2.在打開的頁面選擇之前已經配置好的SFTP,並選擇Move
![](https://i.imgur.com/nmzJYej.png)
```
Create: 新建SFTP
Move: 將選擇的SFTP作為編譯器的SFTP
通常選擇Move就好
```
### 3.配置docker container的編譯器位置
![](https://i.imgur.com/POPxzIP.png)


## 6.映射本地文件並開始編譯
* 1.選擇Tools->Deployment->Browse Remote Host,就可以看到docker中的文件
* ![](https://i.imgur.com/A6Wx1SE.png)
* 2.找到剛才設置的遠程映射路徑,如果路徑設對,文件會呈現為綠色,如下圖所示
![](https://i.imgur.com/4u2s8ns.png)
* 3.我們右鍵綠色的文件夾,選擇Sync with local,他會掃描本地與遠端差異
* 因為只需要同步py文件，因此在Filter中輸入*.py之後,點擊綠色符號
![](https://i.imgur.com/v40xH8V.png)
* 4.完成
![](https://i.imgur.com/c2I1vAH.png)








