2015-11-14 7 views
5

Z jakiegoś powodu nie mogę przekonać Docker do komunikowania się z Dockerhub; search i pull komendy nie działają z przyczyn związanych z DNS. Na przykład:Docker pull nie wyszukuje indeksu.docker.io na 127.0.1.1:53 (nie może nieprzyjemny komunikat DNS)

$ docker pull redis 
Pulling repository redis 
Get https://index.docker.io/v1/repositories/library/redis/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: cannot unmarshal DNS message 

Moje połączenie internetowe jest w porządku. Mogę pingować 127.0.1.1. Czy to jest adres lokalnego hosta? Czy jest tam jakaś usługa DNS Dockerhub, która może być uszkodzona na moim komputerze? Nic innego nie wydaje się być błędem w mojej sieci.

Próbowałem skonfigurować moje połączenie sieciowe, aby korzystać z DNS firmy Google (8.8.8.8), ale to nie miało znaczenia.

aktualizacja

dziwne, nie mogę ping index.docker.io, ale jeśli staram się tam poruszać w przeglądarce, dostaję przekierowany do hub.docker.com.

aktualizacja

teraz mogę potwierdzić, że to dzieje się tylko na jednej sieci lokalnej, w hotelu. Nie mam pojęcia, co robią, ani dlaczego dotyczy tylko Dockera, a nie Gita, Bittorrenta czy innego podłączonego narzędzia.

+0

Czy masz serwer proxy do połączenia internetowego? – VonC

+0

Używałem DNS Google na 8.8.8.8, ale już próbowałem wyłączyć to. Jestem w dużym hotelu, nie zdziwiłbym się, gdyby robili dziwne rzeczy dla ich ruchu. –

+0

Czy używasz hosta Linux bezpośrednio do sesji dokowania, czy maszyny wirtualnej Linux z systemem Windows lub Mac? – VonC

Odpowiedz

3

Pytanie jest trochę stare, ale ponieważ pozostaje bez odpowiedzi i zdarzyło mi się, że się do tego potknąłem.

Lokalna sieć hotelu, w którym się zatrzymywałeś, prawdopodobnie miała konflikt sieciowy z siecią wirtualną utworzoną przez Docker. Miałem ten sam rodzaj wydany w sieci firmowej.

Najprostszą (ale niezbyt dobrze udokumentowaną) poprawką jest zmuszenie Dockera do użycia dowolnego adresu sieciowego dla wirtualnego LAN za pomocą parametru "--bip". W Linuksie jest to zwykle łatwe do osiągnięcia przez edycję konfiguracji Dockera pod/etc, ale na Macu (na wszelki wypadek, gdy ktoś się na to natknie) szczególnie trudno było znaleźć plik do zmiany. Zrób dobrą lekturę na https://github.com/docker/docker/issues/25064, jeśli tak jest w twoim przypadku.

Zasadniczo musisz znaleźć segment sieci, który nie jest używany w sieci, do której jesteś podłączony. Docker spróbuje to zrobić domyślnie: użyje pierwszego prywatnego CIDR, który nie koliduje z żadnym z interfejsów sieciowych. Jeśli znajdujesz się w prywatnym segmencie sieci LAN, który przejeżdża przez inny segment prywatny, Docker tego nie widzi i może w końcu utworzyć sieć lokalną ze zderzającym się CIDR, uniemożliwiając przesyłanie pakietów.

Przykładem dla wyjaśnienia:

Twój adres IP może być 192.168.10.2 z maską sieci z/24. Ta sieć może mieć bramę domyślną 192.168.10.1/24, ale ta brama prowadzi przez inny router z adresem 172.17.1.1.

Docker zauważy, że 192.168.10.0/24 jest w użyciu i utworzy wirtualną sieć z adresami 172.16.0.0/16 - aby kontenery próbowały trasować wszystkie adresy w tym CIDR lokalnie i nigdy nie dotrą do 172.17.1.1 zewnętrzny router. W takim przypadku chcesz zmienić swój --bip na coś innego, powiedzmy 10.0.0.1/16. Umożliwi to prawidłowe rozsyłanie pakietów.

Powiązane problemy