Моя цель — настроить рой докеров на группе из 3 физических рабочих станций Linux (ubuntu) и запустить 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
Затем я запускаю 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
. Я подключился к одному из этих узлов и посмотрел в env, но dscheduler
там не было. Я также пытался пропинговать dscheduler
и получил "пинг: неизвестный хост".
Я думал, что докер должен был предоставить внутренний DNS на основе обнаружения службы, так что вызов dscheduler
приведет меня к адресу узла dschedler
.
Есть ли какие-то настройки на моих компьютерах, которые мне не хватает? или в каком-то из моих файлов чего-то не хватает?
Весь этот код также находится в https://github.com/MentalMasochist/dask-swarm
dworker
, используюdocker ps
, чтобы получить идентификатор работающего контейнера, а затем набираюdocker exec -ti <docker id> /bin/bash
, чтобы войти в узел. Вот где я пытаюсь пропинговатьdscheduler
. - person Rich   schedule 14.09.2017