pycharm直连Linux内部docker过程记录
引言
本篇想大概记录一下在这之前所遇到的一些问题,主要是从一些安装过程,还有一些不当方式进行总结。
docker中安装ssh
首先需要在docker里面安装ssh,一般跟宿主机一样,在docker里的操作为:
root@xxxxx:/# apt-get update
root@xxxxx:/# apt-get upgrade
root@xxxxx:/# apt-get install vim
root@xxxxx:/# apt-get install openssh-server
root@xxxxx:/# passwd # 如果上一步没问题,这里需要设置密码
然后对/etc/ssh/sshd_config文件进行更改为:

然后直接启动:
/usr/sbin/sshd -D &
上面sshd_config只需要改PermitRootLogin yes,而关于port,我这里改成了5000,这样的写法,就不得不提docker的两种网络模式,bridge与host,我这里是host启动方式,即将docker网络与宿主机的网络绑定到一起,那么容器内占的端口即是实际上宿主机在netstat -tnlp中看到的,而宿主机是22的ssh连接,所以docker必须得换成其它端口,关于host,如果docker启动时按这种模式,最明显的特征是可以通过docker ps看到:

它的ports界面为空的,这样对比不用host的bridge以及None网络的好处在于,我不用重新commit容器为镜像,再重新启动,做端口映射为-p 5000:22,那样其实会增大容器的history layer,这个东西很有意思,如果用过harbor的人应该有明显感知,如果对一个docker镜像不断容器互转,history layer会不断加大,就可能实际这docker只有10G,经过不断互转,镜像大小变为了20G,但是推送harbor依然为10G,多出来的10G,即为history。之后学go云原生应该会重点看看这里逻辑。
所以以上我想表达的意思是,在docker run时加上–net=host有时候会方便很多,不然就得将容器——> 镜像 ——> 容器,步骤为:
pycharm连接docker
这里如果docker不开启TCP链接,pycharm连docker与宿主机一样,因为我们前面已经开通了ssh服务,所以首先在pycharm中添加SFTP链接:

点击test connection,如果显示Successfully connected to 192.168.1.180.即为成功,之后在mapping中添加本地项目路径以及对应的容器内项目路径。

然后保存,我们就能看到pycharm下端开始弹出滚动窗口,进行代码同步:

保证了代码连接后,还需要建立编译器链接,否则就无法运行程序,且只有自动上传功能而已。

在settings中找到project interpreter,然后选择添加新的编译器,再选择ssh的,填写host、port以及username,非必要不要选择已经存在的配置,因为前面配置的SFTP与这里最好隔离开:

填写密码,即上面创建docker的ssh设置的密码:

添加docker里面python的编译器路径,以及在sync folders再次将两个项目关联起来:

到此,跟正常的本地环境一样,pycharm就会去加载python环境,右下方出现进度条,结束后即环境导入成功。
pycharm连接docker开启的TCP服务
TCP连接的作用可以认为是将docker整个当成了一个TCP服务,就只要有连接docker能力的应用都有至少查看docker所有信息的权限,比如pycharm,如下图所示,可以看到所有的images和container等信息:

docker开启TCP连接
首先创建目录将TCP的IP写入:
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/tcp.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
EOF
2375似乎是docker官方默认的端口。这里我当时试了另一些博客的,在daemon.json中添加host:0.0.0.0:2375,但有点迷惑是因为host和TCP不是两个概念嘛,然后紧接着博文里又把上面那句话写到tcp.conf里去了,这其实更说明两个关联不大,不然docker都启动不起来,即这两个地方如果填一样地址,docker机制会有冲突,我之前在harbor那篇博文试过,具体如下:
写入成功后,重启 docker 进程:
systemctl daemon-reload
systemctl restart docker
然后可以查看端口是否打开:
ps aux | grep dockerd | grep -v grep

然后同样是在pycharm的settings中,找到docker,添加2375这个端口,如果下方显示connection successful即为连接上了,就能看到本节开头图片中的docker展示图。

更多推荐


所有评论(0)