pycharm连接远程服务器的docker容器通常有两种方法:
第一种:pycharm通过ssh连接已在运行中的docker容器
第二种:pycharm连接docker镜像,pycharm运行代码再自动创建容器
第一种方法比较通用简单,作者比较推崇。
条件:
(1)准备好pycharm专业版,社区版没有连接远程服务器的功能
(2)远程服务器ubuntu,已安装好docker
1. 启动并运行交互式容器
docker run -it --name pycharm_test -v /home/th/PycharmProjects/qa/:/workspace/qa -p 8080:22 --gpus all pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime /bin/bash
这里需要映射主机端口到容器端口,后续就是通过端口来连通容器的。
-p 8080:22:这里主机端口8080, 容器端口是22
2.进入交互式后修改容器的root密码
passwd
3. 给容器安装openssh-server和openssh-client
apt-get install openssh-server
apt-get install openssh-client
安装ssh服务时如果出现以下错误:
?编辑
那就是因为/etc/apt/source.list中的源比较旧了,需要更新一下。更新命令以下:
apt-get -y update
4. 修改SSH配置文件以下选项
vim /etc/ssh/sshd_config
以上命令打开sshd_config文件,在文件最后面添加以下。
PermitRootLogin yes #允许root用户使用ssh登录
5. 重启ssh服务
/etc/init.d/ssh restart
6. 退出容器,连接测试
注意:以上2-5步骤都是在容器内部操作的。
ssh root@127.0.0.1 -p 8080
root:容器内部系统的root账号,不是服务器的用户账号
127.0.0.1:服务器本机ip
-p 端口号:这里的端口就是我们在步骤1 启动容器时映射的主机端口号8080,不是容器的端口22
在服务器上运行以上命令:
这样就测试连接成功了,接下来就是到我们本机windows系统的pycharm连接docker容器了。
1. Configuration配置远程连接
创建SFTP服务docker_test, 参考以上截图填写。
路径映射:
2. 上传本地代码数据到docker容器中并运行
上传完代码数据后, 需要选择设置python编译器:
设置好python解释器就可以run代码了
这里要注意一下,代码所要的运行环境还需要在docker容器安装配置好,比如我这里需要pytorch环境以及python代码运行所需的依赖库都已经在docker容器中通过pip安装好了。
Dockerfile内容:
————————————————————————————————————————
FROM pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime
ADD tools/ /opt/tools/
RUN mkdir ~/.pip/ && cp /opt/tools/pip_sources_aliyun.txt ~/.pip/pip.conf && \
cp /opt/tools/sources.list /etc/apt/ && apt -y update && \
apt install -y vim zip && \
/opt/conda/bin/pip install -r /opt/tools/requirements.txt --trusted-host?http://mirrors.aliyun.com
#以下是设置ssh服务
RUN apt-get install -y openssh-server openssh-client && \
echo root:123456 | chpasswd && \
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
ENV LANG C.UTF-8
CMD ["/usr/sbin/sshd", "-D"]
WORKDIR /work/
————————————————————————————————————————————————
其实在你原来的Dockerfile中添加以下内容就可以
RUN apt-get install -y openssh-server openssh-client && \
echo root:123456 | chpasswd && \
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
其中:
echo root:123456 | chpasswd
123456是设置步骤2的密码
这里注意一下:使用Dockerfile创建镜像后,并启动运行一个容器后,要手动去启动docker容器的ssh:
/etc/init.d/ssh start
note:不管是第一种还是第二种方法,在pycharm连接容器跑代码,在代码中所有有关路径都要写绝对路径,要不然会运行代码时会报错找不到文件或文件夹。