原理
事情起因是因为公司项目代码是python
,部署是docker swarm
方式,在服务器上运行的是一个个的docker容器。
如果常规调试的话,就得每修改一次代码就要重新打包镜像然后启动容器运行,极其的麻烦,所以我们这里需要一个在线远程调试的功能,要能实现本地修改代码无需重新打包和启动容器就能生效。很容易想到的就是sftp的方式,修改代码上传到服务器,不过这里因为是容器运行,就需要端口打洞,且因为部署机器无法直连,要通过跳板机做一个跳转。
原理是在部署代码,打包镜像的时候打包进去一个sshd
,然后将容器内部的22
端口(ssh端口)暴露出来映射到服务器上的一个端口。然后我们通过一个ssh打洞通过跳板机的转发打洞到本地自己机器的一个端口,从而可以把本地的代码上传到容器内,容器内相当于运行的就是你本地的代码,本地有修改代码也可以通过ssh上传到服务器的docker容器内,原理和常用的sftp传代码的功能是一样的,只不过是因为隔了一层容器,所以要麻烦一点。
实现
ssh -f -p 58422 用户名@跳板机ip -L 12345:172.17.132.130:12345 -N
12345是容器暴露出给部署机器的端口,映射的是容器内的22端口,172是部署服务器ip,58422是跳板机端口,基本流程是
容器内22 ——> 部署机12345 ——> 通过跳板机58422跳转 ——> 到本地的12345端口
之后通过访问本地的127.0.0.1:12345
就可以访问容器内了
Pycharm配套配置
pycharm进行一套配置可实现远程debug功能
Tools -> Deployment ->configuration

然后配置好python解释器为服务器上的解释器

注意配置项目路径path mapping,把本地的项目文件夹映射到服务器上对应的项目文件夹
网友评论