2016-08-08 3 views
2

3 개의 VM이 있습니다. 그들 모두는 도커 1.12를 가지고 있고 그들은 centos7을 달리고있다. 모든 포트를 개방하고 VM 년대 내가 노드가 스웜 클러스터에 가입 할 수 없습니다.

docker swarm init --advertise-addr 192.168.140.12 

도커 정보가 나에게 보여 주었다

내 클러스터를 시작 서로에게 를 Ping 할 수 있습니다에

Swarm: active 
NodeID: 0drcj2nku1mv8t16fxva48edxx 
Is Manager: true 
ClusterID: cchn0yzospwoe1h9f55d7omxx 
Managers: 1 
Nodes: 1 

가 지금은 노드 (다른 VM)에 가입하려고를 클러스터. 관리자를 시작한 후 권장되는 명령을 사용합니다.

docker swarm join \ 
    --token SWMTKN-1-48ythur5k6ckkz90ttlprw37p9z3ldclws51qirw5wdyfmvevr-3sb2t66b2fj6e4dhmfo1vavxx \ 
    192.168.140.12:2377 

하지만 내가 가지고 :

클러스터의 관리에
Swarm: pending 
NodeID: 
Error: rpc error: code = 1 desc = context canceled 
Is Manager: false 
Node Address: 192.168.140.14 

:

Error response from daemon: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use "docker info" command to see the current swarm status of your node. 

도커 정보가 나에게 보여 주었다

# netstat -tulpn | grep docker 
tcp6  0  0 :::2377     :::*     LISTEN  1602/dockerd 
tcp6  0  0 :::7946     :::*     LISTEN  1602/dockerd 
tcp6  0  0 :::8080     :::*     LISTEN  3398/docker-proxy 
tcp6  0  0 :::32768    :::*     LISTEN  3199/docker-proxy 
tcp6  0  0 :::32769    :::*     LISTEN  3219/docker-proxy 
tcp6  0  0 :::32770    :::*     LISTEN  3341/docker-proxy 
tcp6  0  0 :::32771    :::*     LISTEN  3436/docker-proxy 
tcp6  0  0 :::2375     :::*     LISTEN  1602/dockerd 
udp6  0  0 :::7946     :::*        1602/dockerd 

가 어떻게이 문제를 디버깅 할 수 있습니다 또는 한 몇 가지 중요한 단계를 수행하는 것을 잊었습니까? 서버가 서로 ssh 액세스해야합니까? 노드에 감사

로그 : 때때로

Aug 8 09:50:24 localhost dockerd: time="2016-08-08T09:50:24.393432145-04:00" level=error msg="Handler for POST /v1.24/swarm/leave returned error: This node is not part of swarm" 
Aug 8 09:51:01 localhost su: (to root) worker1 on pts/1 
Aug 8 09:51:34 localhost dockerd: time="2016-08-08T09:51:34.384408514-04:00" level=error msg="Handler for POST /v1.24/swarm/join returned error: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use \"docker info\" command to see the current swarm status of your node." 
Aug 8 09:51:40 localhost su: (to root) worker1 on pts/1 
Aug 8 09:52:47 localhost dhclient[1277]: DHCPREQUEST on eno16777736 to 192.168.140.254 port 67 (xid=0x11f8fba8) 
Aug 8 09:52:47 localhost dhclient[1277]: DHCPACK from 192.168.140.254 (xid=0x11f8fba8) 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> address 192.168.140.13 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> plen 24 (255.255.255.0) 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> gateway 192.168.140.2 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> server identifier 192.168.140.254 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> lease time 1800 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> nameserver '192.168.140.2' 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> domain name 'localdomain' 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> (eno16777736): DHCPv4 state changed bound -> bound 
Aug 8 09:52:47 localhost dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' 
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' 
Aug 8 09:52:47 localhost systemd: Starting Network Manager Script Dispatcher Service... 
Aug 8 09:52:47 localhost dhclient[1277]: bound to 192.168.140.13 -- renewal in 713 seconds. 
Aug 8 09:52:47 localhost dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 
Aug 8 09:52:47 localhost nm-dispatcher: Dispatching action 'dhcp4-change' for eno16777736 
Aug 8 09:52:47 localhost systemd: Started Network Manager Script Dispatcher Service. 

경고 : 내 모든 VM 년대에

level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled 
+0

ssh 액세스가 필요하지 않습니다. 포트 2377 트래픽을 차단할 수있는 이러한 VM 사이에 방화벽이 있습니까? – BMitch

+0

나는'systemctl disable firewalld'를 수행 했으므로 방화벽은 내가 생각하기에 문제가 아니다. – DenCowboy

+0

docker 정보를 수행 할 때 다음과 같은 변경 사항이 발생합니다. Network : null 브리지 호스트 오버레이 및 null 오버레이 오버레이. 그것은 정상적인/내 문제와 관련이 있습니까? – DenCowboy

답변

1

호스트 이름이었다 : localhost.localdomain. 각 서버에서 /etc/hosts의 호스트 이름을 변경하고 재부팅했습니다. 이제 클러스터 그룹을 만들고 노드를 성공적으로 추가 할 수 있습니다.

+1

/etc/hosts에서 호스트 이름을 수정하는 방법을 샘플로 제공 할 수 있습니까? – Kain

0

나는 동일한 문제가 있었고, 각 작업자 노드의 날짜를 마스터 노드 날짜와 동기화하여 해결했습니다.

[email protected]$sudo date --set="$([email protected] date)" 

이 경우 작업자 노드를 업데이트하면 올바르게 작동합니다.

+0

모든 노드에서 같은 시간을 가졌지 만 문제도 있습니다. . – QtRoS

0

아래 해결 방법 중 어느 것도 효과가없는 경우. 마스터에서 방화벽을 비활성화하고 작동하는지 확인하십시오.

-1

이 문제는 일반적으로 도커 컴퓨터의 일반 드라이버를 사용해야한다는 동일한 문제가 있지만이 드라이버가 정상적으로 작동하지 않는다는 것을 알았습니다. 실제로 도커 컴퓨터는 virtualbox에서만 작동 할 수 있습니다 VM 및 클라우드 드라이버가 아닌 실제 시스템의 드라이버.

만약 당신이 그것을 할 수 없으며 실제로 어떻게되는지 모르지만, 내가 찾은 한 멀리는 원격 호스트와 함께 Swarm을 사용하는 해결책을 찾을 수 없었습니다.

Kubernetes는 작동 할 수 있지만 Kubernetes의 문제는 클라우드에 사용해야하거나 VSphere에 설치해야하고 인턴 과정에 있어야하므로 VSphere에서 ESX와 함께 더 많은 작업을 할 수 없다는 것입니다. 300 VM보다 ...

2

아마도 http 프록시를 사용하고 있었을 것입니다.

다음 명령을 사용하여 dockerd가 수행중인 작업을 확인할 수 있습니다.

wenjianhn에 의해 설명 된 바와 같이
# strace -Fp `pidof dockerd` 2>&1 |grep -v futex |grep -v epoll_wait |grep -v pselect 
+0

OMG 감사합니다 !! Docker Swarm 노드가 http (기본 포트 2377)와 통신하기 위해 http를 사용했는지 전혀 몰랐습니다! 아래 링크에 문서화 된대로 http 프록시를 구성 했으므로 직원이 내 관리자와 동일한 LAN에 있었음에도 불구하고 "docker swarm join"이이 프록시를 사용하고있었습니다. https://stackoverflow.com/questions/23111631/cannot-download-docker-images-behind-a-proxy#answer-28093517 –

0

, 당신의 노동자 노드 (here 설명 된대로) 당신이 고정 표시기에 대한 HTTP 프록시를 구성하지 않은 있는지 확인하십시오. 사실, 스웜 노드는 http (기본 포트 2377)를 통해 통신하므로 http 프록시를 구성한 경우 관리자 노드가 LAN에 있더라도 HTTP 프록시가이를 사용합니다.

또한, 방화벽이 포트 2377의 트래픽을 차단하지 않습니다 있는지 확인하십시오

[email protected]$ telnet ip-of-manager 2377 

는 포트 2377에서 텔넷 연결을 열 수없는 경우,이 포트가 방화벽에 의해 차단되는 것을 의미한다 (작업자 노드의 방화벽 또는 관리자의 방화벽).

관련 문제