pycharm + docker 远程调试容器内程序
pycharm + docker 远程调试容器内程序一、首先假设你已启动了一个docker容器,并在启动时将容器的22端口映射到宿主机的10022端口启动示例:nvidia-docker run -it -p 5000:80 -p 10022:22 -v ~/longlongaaago/workspace/docker:/root/workspace --name "longlonga...
pycharm + docker 远程调试容器内程序
一、首先假设你已启动了一个docker容器,并在启动时将容器的22端口映射到宿主机的10022端口
启动示例:
nvidia-docker run -it -p 5000:80 -p 10022:22 -v ~/longlongaaago/workspace/docker:/root/workspace --name "longlongaaago" kaixhin/cuda-caffe:8.0
启动后使用xshell远程连接宿主机的10022端口是无法连接成功的,此时我们需要进入docker容器内部进行一些操作:
二、进行容器内部修改
docker exec -it 容器名 /bin/bash
1、修改root用户密码
passwd
2、首先检查容器内部是否以安装 openssh-server与openssh-client 若没安装执行一下命令安装
apt-get install openssh-server
apt-get install openssh-client
3、修改SSH配置文件以下选项
vim /etc/ssh/sshd_config
# PermitRootLogin prohibit-password # 默认打开 禁止root用户使用密码登陆,需要将其注释
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #允许root用户使用ssh登录
4、启动sshd服务
/etc/init.d/ssh restart
5、退出容器,连接测试
ssh root@127.0.0.1 -p 10022
输入密码成功进入容器内部即配置成功
6、如若需要将修改后的容器重新保存为镜像,则可进行相应处理,本文直接使用修改后的镜像进行后续操
三、在PyCharm里配置部署环境
打开PyCharmTools > Deployment > Configuration, 新建一个SFTP服务器,名字自己取:

输入如下图配置,注意这里的端口是你刚刚设置的映射到容器22端口的宿主机中的端口,我这里使用的是8022,账号密码是你刚刚自己设置的,这里的Root Path设置一个远程docker容器里的路径:

配置完点击Test SFTP connection,如果成功就恭喜你,可以进行下一步了。
最后在Mappings中配置路径,这里的路径是你本地存放代码的路径,与刚刚配置的Root Path相互映射(意思是Mapping里本机的路径映射到远程的Root Path),方便以后在本地和远程docker中进行代码和其他文件同步。

4. 在PyCharm里配置远程解释器
点击PyCharm的File > Setting > Project > Project Interpreter右边的设置按钮新建一个项目的远程解释器:


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

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

左边是本地的文件,修改之后可以随时右键deployment->upload到远程主机,或者直接在本地调试运行;最右边是远程主机的文件,假如直接在远程修改了文件刷新一下同样可以右键下载到本地,但是我不建议这样做,因为这样很容易带来冲突(毕竟没有很好的版本控制)。目前最好的实践是在局域网的服务器上,时延低,同步速度快。
常见问题:
1. 最常见的问题就是docker容器停了以后里面的SSH服务也会相应停止,因此当你发现自己某一天连不上的时候,记得去docker里重启一下ssh服务:
$service ssh restart
感谢 @丁果 对这个问题提出的解决方案:
“可以在run的时候加上--restart=always,同时ssh启动的写到dockerfile里去。”
2. 在容器中执行apt update的时候可能会出现0% working 的问题
感谢 @奥古斯都 提出该问题以及解决方案:
”这里不是源的问题,因为容器环境太过纯净,这里需要安装apt-transport-https这个deb文件,下载的时候也要注意不要下载最新的版本,否则也会出现依赖问题,要下载和当前docker容器内的apt相匹配的版本。“
参考:
https://www.cnblogs.com/thoughtful-actors/p/10709943.html
http://www.sohu.com/a/324405587_465229
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)