1

제 목표는 3 개의 리눅스 (우분투) 물리적 워크 스테이션 그룹에 도커 웜을 설정하고 그 위에 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을 실행합니다.

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입니다 : 여기

docker-compose.yml이다 나는 떼를 배포 할 때

# 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 

것은 dscheduler 와 동일한 시스템에없는 dworker 노드가 무엇을 알고하지 않습니다 dscheduler입니다. 나는이 노드 중 하나에 ssh'd하고 env에서 보았습니다, 및 dscheduler 거기에 없었습니다. 또한 dscheduler으로 핑 (ping)을 시도하고 "ping : unknown host"를 받았습니다.

도커가 이라는 서비스 검색을 기반으로 내부 DNS를 제공하여 dscheduler을 호출하면 dschedler 노드의 주소로 이동한다고 생각했습니다.

컴퓨터에 일부 설정이 누락 되었습니까? 또는 내 파일에 누락 된 것이 있습니까?

이 모든 코드는 떼에 this issue에 따르면 https://github.com/MentalMasochist/dask-swarm

+0

다른 서비스에 액세스하는 방법을 설명해 주시겠습니까? dworker container 안쪽에서합니까? – herm

+0

@herm 예. 나는'dworker' 노드가 실행중인 컴퓨터에 ssh를 실행하고'docker ps'를 사용하여 컨테이너의 ID를 얻은 다음'docker exec -ti /bin/bash'를 입력하여 노드에 입력합니다 . 그것이'dscheduler'에게 ping을 시도하는 곳입니다. – Rich

+0

혼란스러운 용어입니다. 떼의 노드는 컴퓨터입니다. docker exec를 사용하면 노드가 아닌 컨테이너를 입력 할 수 있습니다.잘못된 이름을 사용했지만 올바른 일을했습니다. :) – herm

답변

0

dask 또는 docker swarm에는 아무런 문제가 없었습니다. 문제는 라우터 펌웨어가 잘못되었습니다. 라우터 펌웨어의 이전 버전으로 돌아 가면 클러스터가 정상적으로 작동합니다.

0

에 있습니다

Because of some networking limitations (I think related to virtual IPs), the ping tool will not work with overlay networking. Are you service names resolvable with other tools like dig?

가 개인적으로 나는 항상 다른 이용하여 컬을 하나 개의 서비스에서 연결할 수 있습니다. 설정이 정확하고 서비스가 통신 할 수 있어야합니다.


은 참고 업데이트 2


떼에서 지원되지 않습니다에 따라 달라집니다 당신이 포트를 사용하지 않을 생각합니다. Servicename은 포트를 대신 할 수 없습니다. 컨테이너가 컨테이너를 내부적으로 알고 있으므로 포트를 사용해야합니다.

+0

컨테이너에 파고를 설치했지만'NXDOMAIN' 오류가 발생했습니다. 호스트를 찾을 수 없음을 의미합니다. 문제 링크를 통해 다른 호스트에서 다른 서비스에 연결할 수 없다는 몇 가지 다른 이유가있을 수 있습니다. 나는이 문제를 읽고 그들의 제안이 나에게 문제를 해결 하는지를 보게 될 것이다. 또한'depends_on'에 대해 알려 주셔서 감사합니다. – Rich

+0

Tarun Lalwani가 작성한 파일이 올바른지 확인했습니다. 컨테이너를 연결하는 데 사용하는 정확한 명령은 무엇입니까? curl의 경우 : curl http : // dscheduler : 8786/path – herm

+0

컨테이너 dworker는 작성 파일의'dask-worker dscheduler : 8786' 명령에서 dscheduler에 연결해야합니다. 여기서'dscheduler'는 스케줄러 및 8786 포트입니다. 이 질문에 대한 대답이 있습니까? – Rich