No se puede conectar a chocolatey.org o cualquier otro sitio de internet desde el contenedor

12

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

Comportamiento esperado

Estoy ejecutando Windows Server 2016 Datacenter (descarga de MSDN) 64 bit - Versión 1607 - Compilación 14393.1715

Estoy usando Docker para Windows y ejecuto Windows Containers.

Me imagino que esto es lo más fácil del mundo, hacer esto:

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

La expectativa es que esto instale chocolate en el contenedor.

Realmente voy a hacer esto en un dockerfile, pero voy a buscar un ejemplo mínimo de trabajo para obtener ayuda en este momento.

Aquí hay un archivo acoplable real que falla (lamentablemente no es tan creativo)

FROM microsoft/windowsservercore

SHELL ["Powershell"]

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

Comportamiento real

Primero lo primero: estoy ejecutando esto en una máquina virtual Virtualbox. Todo lo demás que quiero trabajar funciona, incluyendo, entre otros: conectividad de red interna y pruebas, servidor sql en ejecución, servicios WCF que se ejecutan en mi entorno compuesto por docker, datos que regresan correctamente. Todas las cosas que espero que haga el sistema están funcionando. Este es el último paso, con los dedos cruzados: D. El hecho de que esté ejecutando esto en VirtualBox no debería importar, ya que Hyper-V funciona y todas mis máquinas funcionan como se esperaba. Me imagino que vale la pena mencionarlo.

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

Desde mi sistema operativo host (Server 2016) tengo esta información:

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>

Información

Salida de DockerDebugInfo.ps1: https://gist.github.com/jcolebrand/170673e45bf8a659552f22f2071c30d6

Información del sistema

Ejecución de Windows Server Datacenter (descarga MSDN) 64 bit - Versión 1607 - Compilación 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

Si, por alguna razón olvidada, esto es importante, el sistema operativo host debe estar activado. Estoy haciendo esto en un entorno de desarrollo de una sola vez, así que todavía no estaba particularmente preocupado por activar la VM. No puedo entender cómo esto es importante. Sobre todo porque todo lo demás "simplemente funciona".

jcolebrand
fuente
Parece que hay un problema similar publicado aquí github.com/docker/for-win/issues/427 Intenta detener e iniciar el servicio de docker.
PrestonM
1
Gracias @PrestonM lo hice muchas veces. Y reinició la computadora. Y get-netnat | remove-netnat
jcolebrand
correr Stop-Service docker; Get-ContainerNetwork | Remove-ContainerNetwork -Force; Start-Service dockerpresenta un par de problemas. no se encontró ningún servicio con el nombre docker. no se encontraron redes de contenedores con Get-ContainerNetwork
jcolebrand
¿desde dónde estás ejecutando el comando? ¿Virtualbox o Windows Server?
PrestonM
1
@PrestonM Un poco confundido. Permítanme resumir mi configuración: OSX Host -> VirtualBox -> Windows Server 2016 -> Docker para Windows -> contenedor. La pila se ejecuta en capas de Hyper-V, y puedo hacer todo lo que pido en mis contenedores, incluida la comunicación de red interna entre aplicaciones y una instancia de base de datos local (microsoft / mssql-server-windows-developer), así que todo lo que quiero Que hacer está bien. Los comandos se emiten en un término de PowerShell en el contenedor. El Server2016 puede llegar a Internet bien.
jcolebrand

Respuestas:

5

El problema parece ser que las imágenes de Windows configuran DNS para que primero sea la puerta de enlace predeterminada de la interfaz NAT y luego el DNS de la máquina host. Las búsquedas de DNS fallan contra ese primer resolutor y acceso externo.

Agregar --dns 8.8.8.8(o su solucionador local) a la CLI parece solucionar el problema.

Steven Murawski
fuente
Eso es genial. ¿Quién puede obtener esto en una cartera de pedidos de resolución? : D
jcolebrand
@jcolebrand Hola, también estoy enfrentando el mismo problema. Tengo una configuración de proxy corporativo. ¿Dónde necesitamos agregar esa configuración dns? En daemon.json?
user2301
¿Probaste el comando como se indica en esta respuesta?
jcolebrand
@jcolebrand Probado con docker build --dns 8.8.8.8 -t choco .no funcionó. Luego agregué "dns": ["8.8.8.8"]en daemon.json no funcionó.
user2301
1
Pensé que la bandera dns estaba en ejecución no en la construcción?
jcolebrand
2

Como los comentarios son transitorios, aquí hay información para la próxima persona que intente resolver este problema. No dude en editar esta respuesta para proporcionar más detalles, a menos que sea un Docker para Windows pro, en cuyo caso, responda mejor: D

Fui a hacer una demostración del problema para mi grupo de TI después de haber cambiado mi NIC en mi VM a puente y agregar mi adaptador Thunderbolt. Como existen sistemas de seguridad, me di cuenta de que necesitaba agregar el software de seguridad a mi VM, pero como no está unido al dominio, eso fue un problema. Cambiarlo de nuevo a NAT en el adaptador wifi y luego hacer una demostración del problema en mi VM Windows 2016 de alguna manera mágicamente lo hizo comenzar a funcionar.

La misma red La misma configuración de VM. Mismo software y host, no hay cambios en nada que pueda rastrear.

Habiendo comprobado Get-ContainerNetwork o Get-WinNat sin mostrar nada, realmente había llegado al final de mi diagnóstico. Cambiar ese adaptador NIC y luego volver a cambiarlo aparentemente causó que algo se reiniciara. Buenos tiempos.

Por lo tanto, no tengo una respuesta sólida, pero tengo una buena solución para la próxima persona atrapada en mis zapatos, que, dado mi historial de preguntas y respuestas de StackExchange, seré yo. Pero espero que también te ayude, buscador aleatorio de internet.


Y un impuesto XKCD, para aquellos imposibles de resolver problemas.

XKCD Comic Link a "Sabiduría de los antiguos"

jcolebrand
fuente
1
De acuerdo con esta descripción, estoy tentado de poner una factura en un caché de DNS borrado por el cierre / no cierre de la pila de red, ya que Windows tiene esta amable idea de almacenar en caché las solicitudes negativas también. Si vuelve a suceder, vale la pena probarlo ipconfig /flushdnsen el host de Windows
Tensibai
Para agregar, el host en este caso es OSX, si te refieres al sistema operativo base que aloja todo. Si te refieres a dónde estoy ejecutando el contenedor acoplable, eso es Windows.
jcolebrand
Me refiero al host de Windows, no recuerdo * pilas de red basadas en nix que almacenan en caché consultas negativas
Tensibai
1

En el símbolo del sistema, ejecute ipconfig /ally busque una DNS Serverslínea en la salida con algo que parezca una dirección IP. Esos son los servidores DNS de su máquina host.

Edite C:\ProgramData\Docker\config\daemon.jsony agregue una dnsentrada con esa dirección IP. Por ejemplo, si su servidor DNS es 192.10.0.2 y 8.8.8.8 es el DNS de Google como respaldo:

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

Ahora reinicie Docker Desktop y Docker puede resolver las URL remotas, ya sea en la compilación o en tiempo de ejecución.

Esta solución vino de Faithful Anere en https://medium.com/@faithfulanere/solved-docker-build-could-not-resolve-archive-ubuntu-com-apt-get-fails-to-install-anything-9ea4dfdcdcf2

sussexrick
fuente
-1

Pruebe las instrucciones de instalación de https://chocolatey.org/install#completely-offline-install (sección "Instalación detrás de un 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
Valerij Klein
fuente
1
Estás respondiendo una pregunta diferente aquí, la pregunta es por qué el contenedor no puede resolver las direcciones de Internet
Tensibai