2016-04-15 2 views
1

Я, имеющий этот журнал на моем роя МЕНЕДЖЕР контейнер:Docker роя TLS Не удалось проверить в ожидании узлу

time="2016-04-15T02:47:59Z" level=debug msg="Failed to validate pending node: lookup node1 on 10.0.2.3:53: server misbehaving" Addr="node1:2376" 

Я создал GitHub репо, чтобы воспроизвести мою проблему: https://github.com/casertap/playing-with-swarm-tls Я бегу кластер ок 2 машина (построенная с бродяга)

$script2 = <<STOP 
service docker stop 
sed -i 's/DOCKER_OPTS=/DOCKER_OPTS="-H tcp:\\/\\/0.0.0.0:2376 -H unix:\\/\\/\\/var\\/run\\/docker.sock --tlsverify --tlscacert=\\/home\\/vagrant\\/.certs\\/ca.pem --tlscert=\\/home\\/vagrant\\/.certs\\/cert.pem --tlskey=\\/home\\/vagrant\\/.certs\\/key.pem"/' /etc/init/docker.conf 
service docker start 
STOP 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "ubuntu/trusty64" 

    config.vm.define "node1" do |app| 
     app.vm.network "private_network", ip: "192.168.33.10" 
     app.vm.provision "file", source: "ca.pem", destination: "~/.certs/ca.pem" 
     app.vm.provision "file", source: "node1-cert.pem", destination: "~/.certs/cert.pem" 
     app.vm.provision "file", source: "node1-priv-key.pem", destination: "~/.certs/key.pem" 
     app.vm.provision "file", source: "node1.csr", destination: "~/.certs/node1.csr" 
     app.vm.provision "docker" 
     app.vm.provision :shell, :inline => $script2 
    end 
    config.vm.define "swarm" do |app| 
     app.vm.network "private_network", ip: "192.168.33.12" 
     app.vm.provision "shell", inline: "echo '192.168.33.10 node1' >> /etc/hosts" 
     app.vm.provision "shell", inline: "echo '192.168.33.12 swarm' >> /etc/hosts" 
     app.vm.provision "docker" 
     app.vm.provision "file", source: "ca.pem", destination: "~/.certs/ca.pem" 
     app.vm.provision "file", source: "swarm-cert.pem", destination: "~/.certs/cert.pem" 
     app.vm.provision "file", source: "swarm-priv-key.pem", destination: "~/.certs/key.pem" 
     app.vm.provision "file", source: "swarm.csr", destination: "~/.certs/swarm.csr" 
    end 
end 

Как вы можете видеть мой nODE1 /etc/init/docker.conf имеет опции:

DOCKER_OPTS="-H tcp:\\/\\/0.0.0.0:2376 -H unix:\\/\\/\\/var\\/run\\/docker.sock --tlsverify --tlscacert=\\/home\\/vagrant\\/.certs\\/ca.pem --tlscert=\\/home\\/vagrant\\/.certs\\/cert.pem --tlskey=\\/home\\/vagrant\\/.certs\\/key.pem" 

я

бродяга до

затем подключить к роению

vagrant ssh swarm 
export TOKEN=$(docker run swarm create) 
#dd182b8d2bc8c03f417376296558ba29 

docker run -d swarm join --advertise node1:2376 token://dd182b8d2bc8c03f417376296558ba29 

node1 определяется в/и т.д./файл хостов, как вы можете видеть на бродячего файле обеспечения.

Запустите менеджер роя с уровнем лог отладки (wihthout -d)

docker run -p 3376:3376 -v /home/vagrant/.certs:/certs:ro swarm -l debug manage --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem --host=0.0.0.0:3376 token://dd182b8d2bc8c03f417376296558ba29 

Журнал показывает мне:

time="2016-04-15T02:47:59Z" level=debug msg="Failed to validate pending node: lookup node1 on 10.0.2.3:53: server misbehaving" Addr="node1:2376" 

мой node1 адрес IP в/и т.д./хостов на самом деле:

192.168.33.10 node1 

Похоже, что докер пытается найти псевдоним node1 в неправильной сети моста?

========== подробнее:

Вы можете проверить этот адрес, чтобы увидеть, если служба поиска нашел ваш node1 и это делает:

https://discovery.hub.docker.com/v1/clusters/dd182b8d2bc8c03f417376296558ba29 

Теперь, если вы запустите менеджер роя с опцией -d и сделать:

[email protected]:~$ docker --tlsverify --tlscacert=/home/vagrant/.certs/ca.pem --tlscert=/home/vagrant/.certs/cert.pem --tlskey=/home/vagrant/.certs/key.pem -H swarm:3376 info 
Containers: 0 
Running: 0 
Paused: 0 
Stopped: 0 
Images: 0 
Server Version: swarm/1.2.0 
Role: primary 
Strategy: spread 
Filters: health, port, dependency, affinity, constraint 
Nodes: 1 
(unknown): node1:2376 
    └ Status: Pending 
    └ Containers: 0 
    └ Reserved CPUs: 0/0 
    └ Reserved Memory: 0 B/0 B 
    └ Labels: 
    └ Error: (none) 
    └ UpdatedAt: 2016-04-15T03:03:28Z 
    └ ServerVersion: 
Plugins: 
Volume: 
Network: 
Kernel Version: 3.13.0-85-generic 
Operating System: linux 
Architecture: amd64 
CPUs: 0 
Total Memory: 0 B 
Name: ee85273cbb64 
Docker Root Dir: 
Debug mode (client): false 
Debug mode (server): false 
WARNING: No kernel memory limit support 

вы видите узел имеет быть: в ожидании

ответ

1

Хотя определить узел 1 на вашем компьютере/etc/hosts, контейнер, в котором запущен менеджер роя, не имеет node1 в файле/etc/hosts. По умолчанию контейнер не использует файловую систему хоста. См. https://docs.docker.com/engine/userguide/containers/dockervolumes/. Менеджер Swarm пытается найти node1 через DNS-преобразователь и терпит неудачу.

Существует несколько вариантов решения этой проблемы.

  1. Используйте разворачиваемых FQDN так Swarm менеджер в контейнере может разрешить узел
  2. Или предоставить IP NODE1 в роя присоединиться команду
  3. Или годен/и т.д./хосты файл от хоста к менеджеру Swarm контейнера с помощью -v вариант. См. Ссылку выше.
Смежные вопросы