Docker群集节点无法检测来自群集中另一主机的服务

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

$ 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 

当我部署swarm时,与dworker不在同一台机器上的dworker节点不知道dscheduler是什么。 我ssh进入这些节点之一,看env, dscheduler不在那里。 我也试着ping dscheduler ,并得到“ping:未知的主机”。

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

是否有一些设置到我的电脑,我失踪了? 或者是我的任何文件丢失了什么?

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

根据群体中的这个问题 :

由于一些networking限制(我认为与虚拟IP有关),ping工具将不能用于覆盖networking。 你是否可以使用其他工具来parsing服务名称?

就我个人而言,我总是可以使用curl从一个服务连接到另一个服务。 你的设置似乎是正确的,你的服务应该能够沟通。


FYI依赖于群体不支持


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

达斯克或docker群没有什么问题。 问题是路由器固件不好。 在我回到之前版本的路由器固件后,集群工作正常。

Interesting Posts