目录

一、创建容器

二、配置 SSH 服务

三、在 PyCharm 里配置部署环境

四、在 PyCharm 里配置远程解释器

4.1 2018年版本

4.2 2019年版本

五、操作

上传本地代码到容器

查看远程服务器的文件

六、注意事项及错误

参考文献

   

一、创建容器

sudo nvidia-docker run -it --name 容器名称 -p 宿主机: docker端口 -v 宿主机: docker内文件 镜像:版本 bash

示例一:

sudo nvidia-docker run -it -p 5592:5592 -p 5593:5593 -p 8022:22\ --name="tf_yifan"\
 -v /u02/yifan/project:/project\
			
-v /u02/yifan/data:/data tensorflow/tensorflow:latest-gpu-py3-jupyter /bin/bash

示例二:

sudo nvidia-docker run -it -p 5592:5592 -p 5593:5593 -p 8022:22  -p  5014:5014   --name pytorch_yifan  -v /u02/yifan/project_addr_3:/project -v  /u02/yifan/addr_3:/data  pytorch_xgboost_gpu:V4 /bin/bash

示例三:

sudo docker run -it -p 5592:5592 -p 5593:5593   -p  1229:1229
			-p 1234:8888 -p 8022:22
			--name  psm_fasttext_wb   -v  /project_addr_psm/data:/project_addr_psm/data  -v  /project_addr_psm/code:/project_addr_psm/code    wb_fasttext:V1  /bin/bash

   

说明:-v作用就是宿主机和容器的映射。这个功能很有用,不过需要在创建容器的时候规划好,在后期开发的时候就不用cp宿主机和容器的文件了。

二、配置 SSH 服务

接着我们在刚刚新建的容器里配置 SSH 服务,首先安装 openssh-server:

$ apt-get update

$ apt-get install -y openssh-server

若这个不行,需要考虑离线安装:具体方法可见另一篇文章。

然后建立一个配置文件夹并进行必要的配置:

1、配置密码

$ mkdir /var/run/sshd
$ echo 'root:passwd' | chpasswd# 这里使用你自己想设置的用户名和密码

--这个我通过 passwd 回车后输入密码来实现。

2 、 设置/etc/ssh/sshd_config

$ apt-get install vim
$ vim /etc/ssh/sshd_config 
PermitRootLogin yes
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

   

下面这个没有配置也行:

$ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
			
$"export VISIBLE=now" >> /etc/profile
			
$ mv /etc/bash.bashrc /etc/bash.bashrc.bak

   

注意:修改还是不行,建议copy一个可行的进去替换 /etc/ssh/sshd_config 。

重启 SSH 激活配置:【查看是否启动:sudo ps -e |grep ssh】

3、重启ssh

$ service ssh restart

以上方式,在重启容器后会失效,建议写到文件内:

vi /etc/rc.local

service ssh start

在服务器(宿主机)上(不是服务器的 docker 里)测试刚刚新建 docker 容器中哪个端口转发到了服务器的 22 端口:

$ sudo docker port [your_container_name] 22

# 如果前面的配置生效了,你会看到如下输出 

# 0.0.0.0:8022

最后在本地(通常是win)测试能否用 SSH 连接到远程 docker:
			
$ ssh root@[your_host_ip] -p 8022

# 密码是你前面自己设置的

到这里说明服务器的 docker 端已经完成配置。

4、问题

pycharm docker使用 pycharm 远程docker_服务器

解决方法:检查2,授权的问题。再来一遍2和3。

三、在 PyCharm 里配置部署环境

打开 PyCharm Tools > Deployment > Configuration, 新建一个 SFTP 服务器,名字自己取:

pycharm docker使用 pycharm 远程docker_pycharm docker使用_02

输入如下图配置,注意这里的端口是你刚刚设置的映射到服务器主机 22022(ssh) 端口的 docker 容器中的端口,我这里使用的是 8022,账号密码是你刚刚自己设置的(没有就再创建一个),这里的 Root Path 设置一个远程 docker 容器里的路径,默认是/,点击auto detect会是/root,建议直接空着,在mapping中再作映射。

pycharm docker使用 pycharm 远程docker_docker_03

配置完点击 Test SFTP connection, 如果成功就恭喜你,可以进行下一步了。

最后在 Mappings 中配置路径,这里的路径是你本地存放代码的路径,与刚刚配置的 Root Path 相互映射(意思是 Mapping 里本机的路径映射到远程的 Root Path),方便以后在本地和远程 docker 中进行代码和其他文件同步。比如这里设置:

pycharm docker使用 pycharm 远程docker_服务器_04

使用后文的上传后会出现以下情绪:

pycharm docker使用 pycharm 远程docker_pycharm docker使用_05

Linux容器内会直接同步出信息:

pycharm docker使用 pycharm 远程docker_docker_06

四、在 PyCharm 里配置远程解释器

4.1 2018年版本

点击 PyCharm 的 File > Setting > Project > Project Interpreter (或者直接下面的小图标)右边的设置按钮新建一个项目的远程解释器:

pycharm docker使用 pycharm 远程docker_bash_07

   

pycharm docker使用 pycharm 远程docker_bash_08

图中所述的查的思路:

python

import sys

sys.executable

例如:

pycharm docker使用 pycharm 远程docker_服务器_09

   

配置完成以后在项目解释器界面就会出现如下图所示,可以看到此时已经完成远程解释器的本地化:

pycharm docker使用 pycharm 远程docker_bash_10

配置完成以后需要等本地和远程的环境同步一下,到这里,恭喜你,可以用最舒服的姿势。。。写代码了。

4.2 2019年版本

pycharm docker使用 pycharm 远程docker_服务器_11

   

pycharm docker使用 pycharm 远程docker_docker_12

   

五、操作

上传本地代码到容器

手动设置:

pycharm docker使用 pycharm 远程docker_pycharm docker使用_13

修改之后可以随时右键 deployment->upload 到远程主机,或者直接在本地调试运行;也可以如下图一样,通过tools这里,里面有上传和下载。目前最好的实践是在局域网的服务器上,时延低,同步速度快。

pycharm docker使用 pycharm 远程docker_服务器_14

测试上传本地代码到服务器:

pycharm docker使用 pycharm 远程docker_服务器_15

自动设置:后期只要ctrl + s 就能完成上传了。

pycharm docker使用 pycharm 远程docker_bash_16

   

pycharm docker使用 pycharm 远程docker_pycharm docker使用_17

查看远程服务器的文件

pycharm docker使用 pycharm 远程docker_pycharm docker使用_18

六、注意事项及错误

  1. 每次需要上传以后运行代码方能生效,刚开始时候经常忘记,导致怀疑自己是不是改错
  2. 编译时出现错误,因为运行的是本地的为本地路径:

ssh://root@10.132.237.12:8022/opt/miniconda3/bin/python3 -u E:/Pycharm/despatch_code/server_fastapi_post.py

bash: 第 0 行: E:/Pycharm/despatch_code/server_fastapi_post.py

pycharm docker使用 pycharm 远程docker_bash_19

   

   

参考文献

  1. 上传和下载代码:
  2. Pycharm远程连接服务器
  3. Pycharm合并多个项目