我的目标是在一组3个linux(ubuntu)物理工作站上建立一个docker swarm,并在其上运行dask群集。Docker群集节点无法检测群集中另一主机的服务
$ docker --version
Docker version 17.06.0-ce, build 02c1d87
我能够初始化码头群并将所有机器添加到群中。
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'd到这些节点之一,看env, 和dscheduler
不在那里。我也试着ping dscheduler
,并得到了“ping:unknown host”。
我以为码头应该提供一个基于服务发现的内部dns ,以便调用dscheduler
将带我到dschedler
节点的地址。
有没有设置我的电脑,我失踪了?或者是我的任何文件丢失了什么?
所有这些代码也位于https://github.com/MentalMasochist/dask-swarm
您能否介绍一下您如何尝试访问其他服务?你在dworker容器里面做吗? – herm
@herm是的。我使用'dworker'节点运行的计算机上,使用'docker ps'获取运行容器的id,然后键入'docker exec -ti/bin/bash'来进入节点。那是我试图ping'dscheduler'的地方。 –
Rich
你很混淆术语。群中的一个节点是一台计算机。与码头执行你输入一个容器,而不是一个节点。您使用了错误的名字,但做了正确的事情:) – herm