Docker1.12 Работник не может присоединиться к кластеру (Swarm: Pending)
Версия менеджера Docker version 1.12.0-rc5, build a3f2063
,
Рабочая версия Docker version 1.12.0-rc5, build a3f2063
,
Создан Swarm Manger:
docker swarm init --advertise-addr "172.25.30.2:4243"
Swarm initialized: current node (3kmewyb10p8xj3ke5rpjyw4s8) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5lwzvv7au6hosiqqmdwmcxvmlmhtz4ts04jsg06284fq3posn0-enq26dqnwma38ij48hymtnioq \
172.25.30.2:4243
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5lwzvv7au6hosiqqmdwmcxvmlmhtz4ts04jsg06284fq3posn0-85cwe5pf779qw0knjn6wxdbim \
172.25.30.2:4243
Потом создал рабочий
docker swarm join --token SWMTKN-1-5lwzvv7au6hosiqqmdwmcxvmlmhtz4ts04jsg06284fq3posn0-enq26dqnwma38ij48hymtnioq 172.25.30.2:4243
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.
Я проверил журналы в работнике
time="2016-08-01T00:22:47.449844174-07:00" level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:22:47.449962215-07:00" level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:22:47.450025342-07:00" level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:22:47.450081950-07:00" level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:22:47.450142443-07:00" level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:22:47.450202836-07:00" level=error msg="cluster exited with error: rpc error: code = 1 desc = context canceled"
time="2016-08-01T00:23:31.351868722-07: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."
В docker info
Я видел "Рой: В ожидании"
я сделал docker swarm update
также!. Тем не менее, рабочий не смог присоединиться к кластеру. Итак, как я могу восстановить
UPDATE-1
Удалите и удалите файлы конфигурации, а затем снова установите Docker 1.12 с версией Docker version 1.12.0, build 8eab29e
,
Все еще сталкиваюсь с той же проблемой (не может присоединиться и "Рой: В ожидании" в docker info
) с РАЗНОЙ ошибкой в /var/logs/upstat/docker.logs
time="2016-08-01T11:22:08.629760770-07: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."
Благодарю.
8 ответов
Дело в том, что я пытался соединиться с неправильным "портом" (как docker swarm init
показано на выходе).
1) До "docker swarm init" докер работал только через порт "4243". Я проверил с netstat -tulp | grep docker
, Так что я рекламировал с этим портом!
root@veeru:~# netstat -tulpn | grep docker
tcp6 0 0 :::4243 :::* LISTEN 8750/dockerd
root@veeru:~# docker swarm init --advertise-addr "172.25.30.2:4243"
Swarm initialized: current node (exvwgj0pu4cd124ljnblt9xff) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5j9mpo8hepue6g1sjdas33thr92w1o9hlef5auwqpbxs3glt39-6zomhgu204m9alq51f632nzas \
172.25.30.2:4243
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-5j9mpo8hepue6g1sjdas33thr92w1o9hlef5auwqpbxs3glt39-axhgqgo4jqw4hv38x578m44wh \
172.25.30.2:4243
2) после docker swarm init
, докер работает с 4 портами, включая порт 2377
(netstat -tupln | grep docker
).
root@veeru:~# netstat -tulp | grep docker
tcp6 0 0 [::]:2377 [::]:* LISTEN 8750/dockerd
tcp6 0 0 [::]:7946 [::]:* LISTEN 8750/dockerd
tcp6 0 0 [::]:4243 [::]:* LISTEN 8750/dockerd
udp6 0 0 [::]:7946 [::]:* 8750/dockerd
В пункте 1 это говорит о том, чтобы запустить docker swarm join
с портом 4243
в рабочем. Раньше я так бегал! (Не получится!)
Позже я сделал docker swarm leave
и присоединился к порту 2377. Теперь я могу присоединиться!
docker swarm join --token SWMTKN-1-5j9mpo8hepue6g1sjdas33thr92w1o9hlef5auwqpbxs3glt39-6zomhgu204m9alq51f632nzas 172.25.30.2:2377
Просто выставьте порт 2377 менеджера, он будет работать.
Очевидно, это означает, что узел не может подключиться к диспетчеру, поэтому время ожидания соответствует такому, просто выполните telnet manager-ip 2377 (не пытайтесь пинговать, не будет работать).
И если вы сталкиваетесь с одной и той же ошибкой, даже если все брандмауэры отключены как на узлах, так и на менеджере, попробуйте создать другой менеджер, открывающий порт 2377, как показано ниже:
docker-machine create --driver amazonec2 --amazonec2-open-port 2377 manager1
А теперь попробуйте присоединить узлы к новому диспетчеру, созданному сейчас, но порт, который вы используете для соединения, должен быть 2377, если вы собираетесь использовать diff, тогда выставьте этот порт в приведенной выше команде. Выполнение того же сработало для меня, как я подозреваю, потому что другие использовали другие разные серверы, но я использую один и тот же сервер как для менеджера, так и для узлов.
Для меня это была проблема с брандмауэром.
Я попытался пропинговать узел менеджера и пинговал обратно
Проверил, открываются ли порты с помощью telnet и не удалось подключиться, и выяснил, что это проблема с портом.
Если вы используете Centos, то порт можно легко открыть с помощью firewalld
Проверьте, работает ли firewalld
sudo firewall-cmd --state
Открытие нужного вам порта
sudo firewall-cmd --zone=public --add-port=2377/tcp
Измените порт в соответствии с портами вашего узла, к которым он пытается подключиться.
Согласно сайту докеров, здесь они указали порты для включения. Выполните следующие команды как на Swam Manager, так и на рабочих узлах
sudo ufw enable
sudo ufw allow 22/tcp
sudo ufw allow 2376/tcp
sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp
sudo ufw reload
Мы просто дали доступ к необходимому порту. После выполнения этих команд все команды докеров должны работать.
Я столкнулся с подобной проблемой, в то время как в моем случае порт был заблокирован из-за правила брандмауэра.
У меня была такая же проблема. Я запускал coreos vms в Azure. Я обнаружил, что все мои vms имели один и тот же частный IP-адрес и разные публичные IP-адреса. Обычно это происходит, когда vms входят в одну группу безопасности, однако на этот раз это не так. Проблема заключалась в том, что моя учетная запись достигла максимального количества ресурсов, поэтому я удалил такие ресурсы, как ip-адреса, nsg, сети и т. Д., А затем повторно предоставил новые vms, у них были разные частные ips, и при запуске команды все было в порядке. Моя версия докера 1.12.6
Я пытался подключить 4 узла (1 главный, 3 подчиненных) через образ ami сервера Ubuntu EC2. Для меня это была проблема с брандмауэром. Проверьте свои группы безопасности => Правила для входящих подключений, для меня это было пользовательским, и я изменил его на любое другое, и оно будет работать.
Предполагая, что вы это сделали; если вы получаете «Время ожидания подключения», это означает, что брандмауэр не позволяет вам подключиться. Либо на исходном хосте, либо на целевом хосте (например, правила iptables), либо между ними. Если вы работаете в общедоступном облаке, убедитесь, что списки доступа (например, группы безопасности EC2) разрешают соединения между хостами на этом порту.