如何在Slurm启动Docker容器时配置端口映射实现VSCode远程调试?
Slurm+Docker环境下VSCode远程容器调试的端口映射方案
前提准备
首先确保你的Docker镜像内已经安装并启用SSH服务,否则端口映射后也无法连接:
# 容器内执行(以Debian/Ubuntu为例) apt update && apt install -y openssh-server # 启动SSH服务 service ssh start # 设置容器内用户的登录密码(以root为例) passwd root
修改Slurm作业命令添加端口映射
Slurm支持通过--container-ports参数实现宿主机与容器的端口映射,修改你的srun命令如下:
srun \ --ntasks=1 \ --gpus=1 \ --cpus-per-task=4 \ --time=6-00:00:00 \ --container-image=<docker_image> \ --container-ports=宿主机端口:22 \ # 替换成你想用的宿主机端口,比如2222:22 --pty bash
注:部分旧版本Slurm可能使用--port参数替代--container-ports,如果上述参数无效可以尝试替换。
获取计算节点地址
Slurm作业会调度到集群的计算节点上(而非登录节点),需要获取当前作业所在计算节点的IP或主机名:
# 容器内执行,获取节点IP hostname -i # 或者直接读取Slurm环境变量拿到节点名 echo $SLURMD_NODENAME
记下这个地址,后续配置SSH会用到。
本地SSH配置修改
在本地机器的~/.ssh/config文件中添加如下配置:
Host hpc-docker-container HostName [计算节点IP/主机名] # 替换成刚才获取的地址 Port [你设置的宿主机端口] # 比如之前的2222 User [容器内用户名] # 比如root
VSCode连接容器
- 打开VSCode,安装Remote-SSH插件
- 左侧打开「远程资源管理器」,找到刚配置的
hpc-docker-container - 点击连接,输入容器内用户的密码,即可进入容器环境进行代码调试
特殊场景处理(计算节点无公网访问)
如果集群计算节点不直接对外网开放,需要通过登录节点做端口转发:
# 本地终端执行,将本地端口转发到计算节点的映射端口 ssh -L 本地端口:计算节点IP:宿主机映射端口 登录节点用户名@登录节点IP
此时本地SSH配置需修改为:
Host hpc-docker-container HostName localhost Port [本地端口] User [容器内用户名]
内容的提问来源于stack exchange,提问作者clems
相关产品推荐
相关产品推荐

