如何在实验室局域网内从其他电脑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
- Ubuntu/Debian系统:
- 确认宿主机的局域网IP(比如192.168.1.100)能被其他电脑ping通,保证局域网网络连通。
四、测试局域网SSH连接
- 方案1(主机网络):直接用宿主机IP+SSH端口连接:
ssh 容器内用户名@宿主机局域网IP - 方案2(端口映射):用宿主机IP+10000端口连接:
ssh 容器内用户名@宿主机局域网IP -p 10000 - 推荐用SSH密钥登录,避免重复输密码且更安全:
- 在其他电脑生成密钥对:
ssh-keygen -t ed25519 - 将生成的公钥复制到容器内用户的
~/.ssh/authorized_keys文件中 - 修改容器内文件权限:
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_
相关产品推荐
相关产品推荐

