如何在Spyder中连接Docker容器 远程内核连接失败排查
Spyder 容器远程开发问题答复
Spyder是否支持类VS Code Remote的远程开发功能
支持。Spyder的远程开发模式为本地运行Spyder IDE端,通过SSH协议连接运行在远程主机/容器内的spyder-kernels内核,代码执行、依赖调用、计算资源全部使用远端/容器侧环境,和VS Code Remote连接容器的开发体验一致,不需要在容器内安装完整的Spyder图形界面。
连接失败的核心原因
你当前配置一直卡在连接中,共有3个明确问题:
- 复制到本地的内核配置文件中
ip字段值为127.0.0.1,该地址是容器内部的回环地址,仅容器内进程可访问,本地机器的Spyder无法直接路由到这个地址对应的内核服务 - 启动容器时仅映射了22端口到宿主机2022,内核运行用到的5个随机端口(shell、iopub、stdin、control、hb端口)既没有在启动容器时做端口映射,也没有配置可达路由,本地无法直接访问这些端口
- 启动spyder-kernels时默认绑定容器内的回环网卡,就算手动映射端口,容器外发起的连接请求也会被内核直接拒绝
可直接复现的正确配置流程
你不需要修改现有Dockerfile,按以下步骤操作即可正常连接:
- 启动容器,保持22端口映射即可,不需要额外映射内核端口:
docker run -d -p 2022:22 sshubuntu - SSH登录进容器,启动spyder-kernels时绑定所有网卡地址,同时指定固定端口避免每次随机生成端口增加配置成本:
启动后记录输出中显示的内核连接key值,以及配置文件生成路径。# SSH登录容器 ssh -i key sshuser@localhost -p 2022 # 启动内核,绑定0.0.0.0,指定5个固定端口 python3 -m spyder_kernels.console --ip=0.0.0.0 --shell=50001 --iopub=50002 --stdin=50003 --control=50004 --hb=50005 - 本地新建PowerShell窗口,建立SSH端口转发隧道,将本地端口和容器内的内核端口一一映射,执行后不要关闭该窗口:
ssh -i key -L 50001:127.0.0.1:50001 -L 50002:127.0.0.1:50002 -L 50003:127.0.0.1:50003 -L 50004:127.0.0.1:50004 -L 50005:127.0.0.1:50005 sshuser@localhost -p 2022 -N - 修改本地保存的内核json配置文件,替换端口、key为你实际使用的值:
{ "shell_port": 50001, "iopub_port": 50002, "stdin_port": 50003, "control_port": 50004, "hb_port": 50005, "ip": "127.0.0.1", "key": "替换为你上一步记录的内核key", "transport": "tcp", "signature_scheme": "hmac-sha256", "kernel_name": "" } - 打开Spyder,选择「连接到现有内核」选项,加载修改好的本地json配置文件即可完成连接,后续所有代码运行都会在Docker容器内执行。
更简便的操作方式:不需要手动复制内核配置、手动建立端口转发,直接在Spyder的远程内核连接配置页填写SSH连接信息(地址填localhost、端口填2022、用户名填sshuser、私钥路径选择本地的key文件),Spyder会自动建立SSH隧道、自动拉取容器内的内核配置完成连接,是官方推荐的标准远程连接方式。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

