You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在实验室局域网内从其他电脑SSH连接Docker容器?

局域网内SSH连接Docker容器并用于mpi4py分布式计算的解决步骤

一、容器网络配置(两种可选方案)

方案1:主机网络模式(最适配MPI场景)

  • 启动容器时加--net=host参数,让容器直接复用宿主机的网络栈,容器的SSH服务会直接绑定宿主机的局域网IP和端口,不需要额外做端口映射。
  • 示例启动命令:
    docker run -d --net=host -v /本地代码路径:/容器内代码路径 你的镜像名
    
  • 注意:这种模式下容器不能自定义端口映射,容器内的端口会直接占用宿主机对应端口,要确保宿主机的22端口(或你指定的SSH端口)没被其他服务占用。

方案2:桥接网络+端口映射(更灵活)

  • 先修改容器内的/etc/ssh/sshd_config,让SSH服务监听所有网卡:
    ListenAddress 0.0.0.0
    PermitRootLogin yes # 也可以配置允许特定用户登录,按需调整
    PasswordAuthentication yes # 要密码登录就开这个,用密钥登录更安全
    
  • 重启容器内的SSH服务:service ssh restart(或systemctl restart sshd,看容器用的系统)
  • 启动容器时做端口映射,把容器的SSH端口(默认22)映射到宿主机的10000端口:
    docker run -d -p 10000:22 -v /本地代码路径:/容器内代码路径 你的镜像名
    

二、验证容器内SSH服务正常

  • 进入容器检查SSH状态:docker exec -it 容器ID service ssh status
  • 在容器内测试本地SSH:ssh localhost,确认能正常登录

三、打通局域网访问权限

  • 调整宿主机防火墙,允许外部访问对应端口:
    • Ubuntu/Debian系统:ufw allow 10000/tcp(方案2用这个,方案1则开放22端口)
    • CentOS/RHEL系统:firewall-cmd --add-port=10000/tcp --permanent && firewall-cmd --reload
  • 确认宿主机的局域网IP(比如192.168.1.100)能被其他电脑ping通,保证局域网网络连通。

四、测试局域网SSH连接

  • 方案1(主机网络):直接用宿主机IP+SSH端口连接:
    ssh 容器内用户名@宿主机局域网IP
    
  • 方案2(端口映射):用宿主机IP+10000端口连接:
    ssh 容器内用户名@宿主机局域网IP -p 10000
    
  • 推荐用SSH密钥登录,避免重复输密码且更安全:
    1. 在其他电脑生成密钥对:ssh-keygen -t ed25519
    2. 将生成的公钥复制到容器内用户的~/.ssh/authorized_keys文件中
    3. 修改容器内文件权限:chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh

五、适配mpi4py的分布式计算

  • 确保所有参与计算的机器(包括宿主机和其他局域网电脑)都装了mpi4py和对应的MPI库(比如OpenMPI)
  • 在容器内创建hostfile文件,列出所有节点的IP和可用进程数,示例:
    192.168.1.100 slots=4
    192.168.1.101 slots=4
    
  • 运行MPI程序时指定hostfile:
    mpiexec -hostfile hostfile python3 你的MPI脚本.py
    

内容的提问来源于stack exchange,提问作者komura_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:45:37