docker - 如何将 mpirun 与主节点和从节点一起使用,它们都是不同机器上的 Docker 容器?
问题描述
假设我们在同一个本地网络上有两台机器 A 和 B。为了这个论点,它们的 IP 地址分别是 10.0.0.1 和 10.0.0.2。两台机器上的防火墙都已设置为允许所有端口的连接。我们验证 A 可以使用 SSH 连接到 B,反之亦然。
我们将使用(几乎)相同的文件Dockerfile
和docker-compose.yml
文件在 A 和 B 上部署容器。其中Dockerfile
包含:
FROM danieldv/hode:latest
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN service ssh restart
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
RUN cat /dev/zero | ssh-keygen -q -N ""
RUN echo 'Host *\n Port 2222' >> ~/.ssh/config
EXPOSE 22
CMD /usr/sbin/sshd -D
该docker-compose.yml
文件包含:
version: "3"
services:
dc_test:
build: .
ports:
- "2222:22"
- "10000-10100:10000-10100"
environment:
MPICH_PORT_RANGE: "10000:10100"
extra_hosts:
- "master:10.0.0.1"
- "slave:10.0.0.2"
hostname: master
danieldv/hode:latest
我们将在计算机 B上用 'slave' 替换 'master'使用与此问题无关的)。
请注意,我们使用端口2222
SSH 连接到 A 和 B 上的容器,以避免与22
各自主机上的端口冲突。另请注意,我们转发范围内的端口10000:10100
并将 MPI 限制为仅使用此范围内的端口进行连接。
我们首先通过运行在 B 上启动容器
docker-compose build
docker-compose up -d
来自 B。
然后我们通过运行构建并登录到 A 上的容器
docker-compose build
docker-compose run dc_test bash
来自 A。
接下来,我们将 ssh 公钥从容器的外壳发送master
到slave
使用。我们验证我们可以使用.ssh-copy-id slave
master
slave
master
ssh slave
最后,我们运行mpirun -hosts master,slave hostname
. 此命令的预期输出为:
master
slave
从订单中保存。但是,我实际得到的输出是:
master
[proxy:0:1@slave] HYDU_sock_connect (utils/sock/sock.c:172): unable to connect from "slave" to "master" (Connection timed out)
[proxy:0:1@slave] main (pm/pmiserv/pmip.c:185): unable to connect to server master at port 10000 (check for firewalls!)
我该怎么做才能使此设置正常工作?还是我想做的事情根本不可能?如果是,有人可以给我一个详细的工作示例吗?
解决方案
推荐阅读
- c++ - c ++:将对象从一个线程转移到另一个线程
- php - 如何使用 textarea 输入帖子
- database - 鬼数据行添加到 Firebird 数据库表中?
- java - 如何从 POST 调用中获取正文。JAX-RS
- python - Python 从像 Beeceptor 这样的 Lora 服务器获取 POST 请求
- html - 使用 Instafeed.js 显示非方形 Instagram 图像的正确方法是什么?
- google-schemas - 电子邮件架构标记
- rest - 转储错误请求
- java - Injecting mock before Spring's post-construct phase
- excel - 为什么 Excel 对待 '#N/A 和 #N/A 的方式不同?