【发布时间】:2018-02-23 11:03:06
【问题描述】:
我的目标是在一组 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
然后我在领导框上运行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
当我部署 swarm 时,dworker 节点与 dscheduler 不在同一台机器上
不知道dscheduler 是什么。我 ssh 进入这些节点之一并查看了环境,
dscheduler 不在那里。我还尝试 ping dscheduler,并得到“ping:未知主机”。
我认为 docker 应该提供基于内部 dns 的服务发现
这样调用dscheduler 会将我带到dschedler 节点的地址。
我的计算机上是否有一些我缺少的设置?还是我的任何文件丢失了什么?
【问题讨论】:
-
您能否描述一下您是如何尝试访问其他服务的?你是在 dworker 容器里面做的吗?
-
@herm 是的。我通过 ssh 进入运行
dworker节点的计算机,使用docker ps获取运行容器的 id,然后键入docker exec -ti <docker id> /bin/bash进入节点。这就是我尝试 pingdscheduler的地方。 -
您混淆了术语。 swarm 中的一个节点是一台计算机。使用 docker exec 你输入一个容器而不是一个节点。你用了错误的名字,但做了正确的事:)
-
我检查了,你的设置工作正常,我可以在不同的机器上从工作人员远程登录到调度程序
标签: docker docker-swarm dask docker-swarm-mode dask-distributed