如何将mpirun与主节点和从节点一起使用,这两个节点都是不同机器上的Docker容器?

如何将mpirun与主节点和从节点一起使用,这两个节点都是不同机器上的Docker容器?,docker,docker-compose,mpi,Docker,Docker Compose,Mpi,假设我们有两台机器,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

假设我们有两台机器,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
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
docker compose.yml
文件包含:

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
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
我们将在计算机B上用“从”替换“主”。请注意,基本容器danieldv/hode:latest,是我自己构建的容器(可在Docker Hub上获得),其中安装了MPICH(以及我经常使用的与此问题无关的一堆其他东西)

请注意,我们使用port
2222
将SSH连接到A和B上的容器中,以避免与各自主机上的port
22
冲突。还要注意,我们转发范围
10000:10100
中的端口,并将MPI限制为仅使用此范围中的端口进行连接

我们首先通过运行

docker编写构建
docker compose up-d
从B

然后,我们通过运行

docker编写构建
docker compose运行dc_测试bash
从A

接下来,我们使用
ssh copy id slave
master
容器的外壳将ssh公钥从
master
发送到
slave
。我们验证是否可以使用
ssh-slave
master
登录到
slave

最后,我们运行
mpirun-hosts master,slave hostname
。此命令的预期输出为:

master
奴隶
从订单中保存。但是,我实际得到的输出是:

master
[代理:0:1@slave]HYDU_sock_connect(utils/sock/sock.c:172):无法从“从”连接到“主”(连接超时)
[代理:0:1@slave]main(pm/pmiserv/pmip.c:185):无法连接到端口10000处的服务器主机(检查防火墙!)
要使此设置正常工作,我可以做些什么?或者我想做的根本不可能?如果是的话,有人能给我一个详细的工作示例吗