其实和在宿主机上pycharm远程调试方法差不多,只不过多了第三个介质(容器),编译环境不再是之前的宿主机环境,而是容器里你按照自己需求配置好的环境。项目仓库内容涉及了三个地方,(本地、宿主机和容器)三者是同步的,其中本地和宿主机项目仓库是一直存在的,容器里的是随着容器是否存在的。

如果没有安装docker的可以参考我的上一个记录ubuntu配置docker, nvidia-container-toolkit

创建容器

首先你得在宿主机创建你的容器

docker run -itd --name <容器名称> --gpu all -p 8011:22 --rm -v path1:/path2/ <镜像>
# -itd 是创建一个容器, 并在容器里命令行交互
# --gpus all 可以使用所有的GPU资源
# -p 8011:22 降宿主机的8011端口映射到容器的22端口
# -v 宿主机项目路径:/容器路径/    会在容器里自动创建一个新的路径,并把宿主机项目拷贝过来
# path1: 宿主机路径
# path2: 容器路径

宿主机和容器SSH配置

在宿主机和容器里均执行下列命令

# Ubuntu
$ apt update && apt install openssh-server

在容器里配置ssh

# 进入刚才创建好的容器
$ docker exec -it <容器名称>  /bin/bash
# 次配置在docker container中完成
$ echo 'root:qwer' | chpasswd
# 将Root的密码修改为qwer
$ 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/profile12345678

重启ssh

我是在宿主机和容器里都重启了

service ssh restart

测试端口映射

# 此操作在宿主机
$ docker port <your container name> 22
# 此操作将查看docker container中端口22,在远程服务器上端口的映射
# 输出结果如下所示
0.0.0.0:8022
# 表明只要ssh链接远程服务器的8022端口,实际是链接docker container中的22端口。

本地ssh连接容器

$ ssh root@<你服务器的ip地址> -p 8022
# 密码就是刚刚重新设置的qwer

如果顺利进去,则证明成功了,可以进行后续步骤

若提示密码总是错误,在容器里手动配置

vi /etc/ssh/sshd_config

修改AddressFamily any 前面的 # 删除
修改PermitRootLogin yes 前面的 # 删除
修改PasswordAuthentication yes 前面的 # 删除
重启ssh服务, service ssh restart

pycharm配置

这一步其实就和pycharm在宿主机上远程调试一摸一样,只不过端口换成了刚才配置的端口,用户名换成了root,密码也是刚才配置的密码

详情参考我的其他记录Pycharm的下载、安装激活、远程配置开发和运行环境配置