Docker swarm节点无法在swarm

时间:2017-09-14 12:41:34

标签: docker docker-swarm dask docker-swarm-mode dask-distributed

我的目标是在一组3个linux(ubuntu)物理工作站上设置一个docker swarm,并在其上运行dask群集。

$ docker --version
Docker version 17.06.0-ce, build 02c1d87

我能够启动docker swarm并将所有机器添加到swarm中。

cordoba$ docker node ls
ID                            HOSTNAME    STATUS    AVAILABILITY MANAGER STATUS
j8k3hm87w1vxizfv7f1bu3nfg     box1        Ready     Active              
twg112y4m5tkeyi5s5vtlgrap     box2        Ready     Active              
upkr459m75au0vnq64v5k5euh *   box3        Ready     Active              Leader

然后我在Leader框上运行docker stack deploy -c docker-compose.yml dask-cluster

以下是docker-compose.yml

version: "3"

services:

  dscheduler:
    image: richardbrks/dask-cluster
    ports:
     - "8786:8786"
     - "9786:9786"
     - "8787:8787"
    command: dask-scheduler
    networks:
      - distributed
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role == manager]

  dworker:
    image: richardbrks/dask-cluster
    command: dask-worker dscheduler:8786
    environment:
      - "affinity:container!=dworker*"
    networks:
      - distributed
    depends_on:
      - dscheduler
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

networks:
  distributed:

这里是richardbrks/dask-cluster

# Official python base image
FROM python:2.7    
# update apt-repository
RUN apt-get update
# only install enough library to run dask on a cluster (with monitoring)
RUN pip install --no-cache-dir \
    psutil \
    dask[complete]==0.15.2 \
    bokeh

当我部署群集时,与dworker不在同一台计算机上的dscheduler个节点 不知道dscheduler是什么。我ssh到其中一个节点,看着env, 并且dscheduler不存在。我还尝试ping dscheduler,并获得“ping:unknown host”。

我认为docker应该提供基于服务发现的内部dns 因此,调用dscheduler会将我带到dschedler节点的地址。

我缺少一些设置到我的电脑吗?或者我的任何文件丢失了什么?

所有这些代码也位于https://github.com/MentalMasochist/dask-swarm

2 个答案:

答案 0 :(得分:0)

根据群体中的this issue

  

由于某些网络限制(我认为与虚拟相关)   IP),ping工具不适用于覆盖网络。你是   服务名称可以使用dig等其他工具解析吗?

我个人总是可以使用curl从一个服务连接到另一个服务。您的设置似乎正确,您的服务应该能够进行通信。

支持FYI不支持swarm

更新2:我认为您没有使用该端口。 Servicename不是该端口的替代品。您需要在容器内部知道端口时使用该端口。

答案 1 :(得分:0)

dask或docker swarm没有任何问题。问题是糟糕的路由器固件。在我回到之前版本的路由器固件之后,集群工作正常。