我在Windows 10周年纪念版上运行了一个docker windows容器,我希望将IIS设置为容器的反向代理。每https://blogs.technet.microsoft.com/virtualization/2016/05/25/windows-nat-winnat-capabilities-and-limitations/它似乎表明它是不可能的,因为不可能使用本地主机引用内部NAT范围。这会留下动态分配的IP地址,只能在运行映像后通过运行docker inspect命令来发现。我希望有一种更有效的方式让我忽视。
答案 0 :(得分:4)
我们还在容器上使用了固定的IP地址,但我们使用另一个带nginx
的容器来执行反向代理。我们的想法是,在我们的Container Host(Windows Server 2016)上,我们只安装Docker而不是其他任何东西。所有配置都在容器中完成。这样我们就可以轻松迁移到另一台主机。
这是nginx代理的Dockerfile
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
请注意,nginx.conf
已复制到nginx
配置文件夹。它包含反向代理设置。从http
节点中提取我们的一个站点:
server {
listen 80;
server_name somesite.mydomain.com;
location / {
proxy_pass http://172.22.108.6/;
}
}
nginx
容器应与-p 80:80
当我们添加新容器时,我们运行一个powershell脚本来更新nginx.conf并重新加载nginx。 (这很少见)
示例:
80
向nginx容器公开,因此请求172.22.108.6
172.22.108.6
答案 1 :(得分:2)
我们通过将默认子网上的IP地址分配给每个Windows容器并将端口80导出容器来解决此问题。这为我们提供了一个稳定的地址,可以放入ARR反向代理规则。例如,以下内容在地址172.20.118.129处创建一个容器,然后验证容器是否在请求的地址运行。
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