Nie można połączyć się z chocolatey.org lub inną witryną internetową z poziomu kontenera


12

xpost od https://forums.docker.com/t/cannot-connect-to-chocolatey-org/38745

Spodziewane zachowanie

Korzystam z systemu Windows Server 2016 Datacenter (pobieranie MSDN) w wersji 64-bitowej - wersja 1607 - kompilacja 14393.1715

Używam Docker dla Windows i działam Windows Containers.

Myślę, że jest to najłatwiejsza rzecz na świecie, aby to zrobić:

reboot my host machine
docker run -it microsoft/windowsservercore
powershell
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

Oczekuje się, że to zainstaluje czekoladę w pojemniku.

Właściwie zamierzam to zrobić w pliku dokera, ale szukam minimalnego działającego przykładu, aby uzyskać pomoc w tej chwili.

Oto rzeczywisty plik dokera, który zawodzi (niestety nie jest tak kreatywny)

FROM microsoft/windowsservercore

SHELL ["Powershell"]

ENV ChocolateyUseWindowsCompression false;
RUN iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));

Rzeczywiste zachowanie

Po pierwsze: uruchamiam to na maszynie wirtualnej Virtualbox. Wszystko, co chcę pracować, działa, w tym między innymi: wewnętrzna sieć połączeń i testy, uruchomiony serwer SQL, usługi WCF działające w moim środowisku tworzenia dokerów, dane wracają poprawnie. Wszystkie rzeczy, które oczekuję od systemu, działają. To ostatni krok, kciuki: D. Fakt, że uruchamiam to w VirtualBox, nie powinien mieć znaczenia, ponieważ Hyper-V działa i wszystkie moje maszyny działają zgodnie z oczekiwaniami. Po prostu uważam, że warto o tym wspomnieć.

docker run -it microsoft/windowsservercore
powershell
PS C:\> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
Exception calling "DownloadString" with "1" argument(s): "The remote name could not be resolved: 'chocolatey.org'"
At line:1 char:1
+ iex ((new-object net.webclient).DownloadString('https://chocolatey.or ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

PS C:\> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : 339189e8dd56
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : attlocal.net

Ethernet adapter vEthernet (Container NIC 6412b757):

   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #4
   Physical Address. . . . . . . . . : 00-15-5D-80-E9-2C
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::a51b:820e:e45d:fab6%29(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.22.202.147(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . : 172.22.192.1
   DNS Servers . . . . . . . . . . . : 172.22.192.1
                                       10.0.2.2
   NetBIOS over Tcpip. . . . . . . . : Disabled

Z mojego systemu operacyjnego hosta (Server 2016) mam te informacje:

PS C:\docker> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : WIN-CDPNLUMSTOE
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : attlocal.net

Ethernet adapter vEthernet (HNS Internal NIC) 2:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2
   Physical Address. . . . . . . . . : 00-15-5D-80-E5-17
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::5939:52e7:aaf3:5b70%9(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.22.192.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 301995357
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter vEthernet (HNS Internal NIC) 3:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #3
   Physical Address. . . . . . . . . : 00-15-5D-B6-45-8D
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::1de4:bff7:36fb:ee92%13(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.23.128.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 570430813
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Desktop Adapter
   Physical Address. . . . . . . . . : 08-00-27-51-5F-6A
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::10de:923b:b866:221d%4(Preferred)
   IPv4 Address. . . . . . . . . . . : 10.0.2.15(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Friday, August 19, 1881 6:47:42 PM
   Lease Expires . . . . . . . . . . : Tuesday, September 26, 2017 11:15:59 PM
   Default Gateway . . . . . . . . . : 10.0.2.2
   DHCP Server . . . . . . . . . . . : 10.0.2.2
   DHCPv6 IAID . . . . . . . . . . . : 50855975
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-4E-0C-48-08-00-27-51-5F-6A
   DNS Servers . . . . . . . . . . . : 10.0.2.2
   NetBIOS over Tcpip. . . . . . . . : Enabled

Tunnel adapter isatap.{C420BD56-5715-49BF-9382-5EA99AA48563}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.{70EA4F39-FE0F-4040-B718-ACAC00765808}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #6
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.attlocal.net:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : attlocal.net
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #7
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
PS C:\docker>

Informacja

Dane wyjściowe DockerDebugInfo.ps1: https://gist.github.com/jcolebrand/170673e45bf8a659552f22f2071c30d6

Informacje o systemie

System Windows Server Datacenter (pobieranie MSDN) 64-bitowy - wersja 1607 - kompilacja 14393.1715

PS C:\docker> docker version
Client:
 Version:      17.06.2-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:57:19 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.2-ce
 API version:  1.30 (minimum version 1.24)
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:59:47 2017
 OS/Arch:      windows/amd64
 Experimental: true

Jeśli z jakiegokolwiek nieoczekiwanego powodu jest to ważne, system operacyjny hosta musi zostać aktywowany. Robię to w środowisku deweloperskim, więc nie martwiłem się jeszcze o aktywację VM. Nie mogę pojąć, jak to jest ważne. Zwłaszcza, że ​​wszystko inne „po prostu działa”.


Wygląda na to, że podobny problem został opublikowany tutaj github.com/docker/for-win/issues/427 Spróbuj zatrzymać i uruchomić usługę dokowania .
PrestonM,

1
Dzięki @PrestonM Robiłem to wiele razy. I ponownie uruchomiłem komputer. I get-netnat | remove-netnat
jcolebrand

bieganie Stop-Service docker; Get-ContainerNetwork | Remove-ContainerNetwork -Force; Start-Service dockerprzedstawia kilka problemów. nie znaleziono usługi z dokerem nazw. nie znaleziono sieci kontenerów z Get-ContainerNetwork
jcolebrand

skąd uruchamiasz polecenie? Virtualbox czy Windows Server?
PrestonM,

1
@PrestonM Trochę zdezorientowany. Pozwól mi podsumować moją konfigurację: Host OSX -> VirtualBox -> Windows Server 2016 -> Docker dla Windows -> kontener. Cały stos działa na warstwach Hyper-V i mogę robić wszystko, o co prosię w moich kontenerach, w tym komunikację sieci wewnętrznej między aplikacjami i lokalną instancją bazy danych (microsoft / mssql-server-windows-developer), więc wszystko, czego chcę robić to dobrze. Komendy są wydawane w pojemniku w formie PowerShell. Server2016 może dobrze dotrzeć do Internetu.
jcolebrand

Odpowiedzi:


6

Problem polega na tym, że obrazy systemu Windows konfigurują DNS jako pierwszą bramę domyślną interfejsu NAT, a następnie DNS komputera hosta. Wyszukiwanie DNS kończy się niepowodzeniem w stosunku do tego pierwszego resolvera i dostępu zewnętrznego.

--dns 8.8.8.8Wydaje się, że dodanie (lub lokalnego resolvera) do CLI rozwiązuje problem.


To cudownie. Kto może uzyskać to do zaległości w celu rozwiązania problemu? : D
jcolebrand

@jcolebrand Cześć, mam również ten sam problem. Mam konfigurację korporacyjnego serwera proxy. Gdzie musimy dodać tę konfigurację dns? W daemon.json?
user2301

Czy próbowałeś wykonać polecenie podane w tej odpowiedzi?
jcolebrand

@jcolebrand Wypróbowany z docker build --dns 8.8.8.8 -t choco .nie działał. Następnie dodałem "dns": ["8.8.8.8"]w daemon.json nie działa.
user2301

1
Myślałem, że flaga dns nie działa podczas kompilacji?
jcolebrand

2

Ponieważ komentarze są przejściowe, oto informacje dla następnej osoby próbującej rozwiązać ten problem. Edytuj tę odpowiedź, aby podać więcej szczegółów, chyba że jesteś Dockerem dla systemu Windows pro, w takim przypadku podaj lepszą odpowiedź: D

Po zmianie swojej karty sieciowej na mojej maszynie wirtualnej przeszedłem do demonstracji problemu mojej grupie IT i dodałem adapter Thunderbolt. Ponieważ istnieją systemy bezpieczeństwa, zdałem sobie sprawę, że muszę dodać oprogramowanie zabezpieczające do mojej maszyny wirtualnej, ale ponieważ nie jest ono przyłączone do domeny, to był problem. Przełączenie go z powrotem do NAT na karcie Wi-Fi, a następnie pokazanie problemu w mojej maszynie wirtualnej z systemem Windows 2016 w jakiś magiczny sposób sprawiło, że zaczęło działać.

Ta sama sieć. Ta sama konfiguracja maszyny wirtualnej. To samo oprogramowanie i host, bez zmian w czymkolwiek, co mogę śledzić.

Po sprawdzeniu, że Get-ContainerNetwork lub Get-WinNat nic nie pokazuje, naprawdę byłem na końcu diagnostyki. Zmiana tego adaptera karty sieciowej, a następnie jego przywrócenie najwyraźniej spowodowało, że coś się zresetowało. Dobre czasy.

Więc nie mam solidnej odpowiedzi, ale mam dobre obejście dla następnej osoby utknącej w moich butach, która, biorąc pod uwagę moje doświadczenie w zakresie pytań i odpowiedzi StackExchange, będę mną. Ale mam nadzieję, że to ci pomoże, losowy pytający w Internecie.


Oraz podatek XKCD dla tych, którzy nie mogą rozwiązać problemów.

Komiks XKCD Link do „Mądrości starożytnych”


1
Zgodnie z tym opisem kusi mnie, aby wystawić rachunek za pamięć podręczną DNS wyczyszczoną przez zamknięcie / brak zamknięcia stosu sieciowego, ponieważ system Windows ma taki pomysł na buforowanie również negatywnych żądań. Jeśli to się powtórzy, warto wypróbować ipconfig /flushdnshosta systemu Windows
Tensibai

Dodam, że hostem w tym przypadku jest OSX, jeśli chodzi o podstawowy system operacyjny, w którym znajduje się wszystko. Jeśli masz na myśli, gdzie uruchamiam kontener Dockera, to Windows.
jcolebrand

Mam na myśli hosta systemu Windows, nie pamiętam * stosów sieciowych opartych na
nixie

1

W wierszu polecenia uruchom ipconfig /alli poszukaj DNS Serverslinii na wyjściu z czymś, co wygląda jak adres IP. To są serwery DNS twojego hosta.

Edytuj C:\ProgramData\Docker\config\daemon.jsoni dodaj dnswpis z tym adresem IP. Na przykład, jeśli Twoim serwerem DNS jest 192.10.0.2, a 8.8.8.8 to DNS Google jako kopia zapasowa:

{
    "dns": ["192.10.0.2", "8.8.8.8"]
}

Teraz uruchom ponownie Docker Desktop, a zdalne adresy URL mogą zostać rozwiązane przez Docker, zarówno podczas kompilacji, jak i podczas działania.

To rozwiązanie pochodzi z Faithful Anere pod adresem https://medium.com/@faithfulanere/solved-docker-build-could-not-resolve-archive-ubuntu-com-apt-get-fails-to-install-anyea-9ea4dfdcdcf2


-1

Wypróbuj instrukcje instalacji z https://chocolatey.org/install#completely-offline-install (sekcja „Instalowanie za serwerem proxy”):

    @powershell -NoProfile -ExecutionPolicy Bypass -Command "[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

1
Odpowiadasz na inne pytanie tutaj, pytanie brzmi: dlaczego kontener nie może rozwiązać adresów internetowych
Tensibai,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.