2017-01-13 24 views
14

Gram Docker Swarm i używam docker-compose.yml z docker deploy. Wszystkie usługi zostaną wdrożone z wyjątkiem jednego, który pozostaje w stanie oczekiwania. Dodałem ograniczenie, które wiąże tę usługę z jednym z węzłów. Moje pytanie dotyczy nie tylko tego konkretnego problemu, ale także sposobu rozwiązywania problemów. Dokumentacja Docker wymienia możliwe przyczyny, dla których usługa jest w stanie oczekiwania, ale żadna z nich nie ma zastosowania (problem ograniczenia, drenaż zasobów).Jak mogę się dowiedzieć, dlaczego moja usługa Docker jest w stanie oczekiwania?

Czy mogę zobaczyć gdzieś proces myślowy dokera? Co to myśli?

Edycja: powinienem był bardziej zrozumiały, że używam nowej, wprowadzonej przez 1.12, opcji roju.

Odpowiedz

22

opiszę jak do debugowania, gdy usługa nie uruchamia się zgodnie z oczekiwaniami w trybie doker roju.

Przede wszystkim uzyskaj identyfikator zadania z numerem docker service ps <service-name>.

Następnie warto sprawdzić dane meta za pomocą docker inspect <task-id>. W szczególności komunikat o błędzie przed uruchomieniem kontenera znajduje się w polu statusu, a następnie ponownie sprawdź, czy został uruchomiony z zamierzonymi parametrami.

Jeśli zadanie ma identyfikator pojemnika, został nieprawidłowo zakończony po uruchomieniu pojemnik, więc sprawdź dziennik pojemnika z docker logs <container-id>

Mam nadzieję, że to będzie trochę pomóc.

+2

Dzięki! Oczekiwanie w moim przypadku oznaczało, że roota w dokerze nie mógł znaleźć odpowiedniego węzła (który spełniłby moje ograniczenie) –

1

docker run swarm ma opcję --debug, która mówi więcej.

Zobacz roota w stacji dokującej issue 2341 lub docker issue 24982, aby zobaczyć tę opcję używaną do debugowania stanów oczekujących.

Na przykład:

(unknown): 192.168.99.106:2375(node2 ip) 
└ ID: 
└ Status: Pending 
└ Containers: 0 
└ Reserved CPUs: 0/0 
└ Reserved Memory: 0 B/0 B 
└ Labels: 
└ Error: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.... 
+3

Używam 'docker swarm init', więc uruchamiam wewnętrzny menedżer rojów za pomocą' swarmkit'. Pomoc wiersza poleceń nie wyświetla opcji '--debug'. Domyślam się, że uruchomiłem demona docker, używając '--debug'. Spróbuję tego. – raarts

+0

Należy również dodać, że zamiast umieszczać usługę w pliku 'docker-compose.yml', można ją oświetlać ręcznie. – raarts