我的目标是在一组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
节点的地址。
我缺少一些设置到我的电脑吗?或者我的任何文件丢失了什么?
答案 0 :(得分:0)
根据群体中的this issue:
由于某些网络限制(我认为与虚拟相关) IP),ping工具不适用于覆盖网络。你是 服务名称可以使用dig等其他工具解析吗?
我个人总是可以使用curl从一个服务连接到另一个服务。您的设置似乎正确,您的服务应该能够进行通信。
支持FYI不支持swarm
更新2:我认为您没有使用该端口。 Servicename不是该端口的替代品。您需要在容器内部知道端口时使用该端口。
答案 1 :(得分:0)
dask或docker swarm没有任何问题。问题是糟糕的路由器固件。在我回到之前版本的路由器固件之后,集群工作正常。