一、远程服务器以及本地pycharm配置
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
sudo sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo 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的最后一行
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
然后设置相应的路径即可
二、使用中的问题
1 在使用pycharm调试程序的时候,无法连接到控制台,程序无法运行
问题描述:
解决办法:
将run->Edit Configurations相应选项卡下,run with python console的“√”去掉