Ejecuto un contenedor de ventanas acoplables en la edición de aniversario de Windows 10 y estoy buscando configurar IIS como un proxy inverso para el contenedor. Por https://blogs.technet.microsoft.com/virtualization/2016/05/25/windows-nat-winnat-capabilities-and-limitations/ parece sugerir que es imposible, ya que es imposible hacer referencia a la interna Rango NAT utilizando host local. Lo que deja una dirección IP asignada dinámicamente que solo se puede descubrir ejecutando un comando de inspección de ventana acoplable después de ejecutar la imagen. Espero que haya una manera más eficiente que estoy pasando por alto.
También usamos una dirección IP fija en nuestros contenedores, pero usamos otro contenedor con nginx para hacer el proxy inverso. La idea es que en nuestro Container Host (Windows Server 2016) solo instalemos Docker y nada más. Toda la configuración se realiza en los contenedores. De esta manera podemos migrar fácilmente a otro host.
Este es el Dockerfile para el proxy nginx
FROM microsoft/windowsservercore SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] ARG NgInxVersion="1.13.5" ENV NgInxZipUrl="http://nginx.org/download/nginx-${NgInxVersion}.zip" RUN Invoke-WebRequest -Uri $env:NgInxZipUrl -UseBasicParsing -Outfile c:\\nginx.zip RUN Expand-Archive -Path c:\\nginx.zip -DestinationPath c:\\nginx WORKDIR "c:\\nginx\\nginx-${NgInxVersion}" COPY ./nginx.conf conf\\nginx.conf ENTRYPOINT powershell .\\nginx.exe Tenga en cuenta que nginx.conf se copia en la carpeta de configuración de nginx . Contiene la configuración del proxy inverso. Extracto del nodo http para uno de nuestros sitios:
server { listen 80; server_name somesite.mydomain.com; location / { proxy_pass http://172.22.108.6/; } } El contenedor nginx debe ejecutarse con -p 80:80
Cuando agregamos nuevos contenedores, ejecutamos un script de PowerShell que actualiza nginx.conf y vuelve a cargar nginx. (esto será raro)
Ejemplo:
80 está expuesto al contenedor nginx, la solicitud va allí172.22.108.6172.22.108.6Resolvimos este problema asignando una dirección IP en la subred predeterminada a cada contenedor de Windows y exportando el puerto 80 fuera del contenedor. Esto nos dio una dirección estable para poner en una regla de proxy inverso ARR. Por ejemplo, lo siguiente crea un contenedor en la dirección 172.20.118.129 y luego verifica que el contenedor se esté ejecutando en la dirección solicitada.
PS C:\WINDOWS\system32> docker run -d --name myservice --ip=172.20.118.129 microsoft/iis:nanoserver 7d20d8a131805727868ddf85f7c1f455fa2489bb2607b250e694a9e530a61302 PS C:\WINDOWS\system32> docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myservice 172.20.118.129