我在Windows 10周年纪念版上运行了docker windows容器,并且希望将IIS设置为容器的反向代理。根据https://blogs.technet.microsoft.com/virtualization/2016/05/25/windows-nat-winnat-capabilities-and-limitations/,似乎表明它是不可能的,因为使用本地主机无法引用内部NAT范围。这留下了一个动态分配的IP地址,只有在运行映像后运行docker inspect命令才能发现该IP地址。我希望有一种更有效的方式,我可以忽略。如何为Docker窗口容器定义反向代理
回答
我们通过将默认子网上的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
我们还使用我们的集装箱固定的IP地址,但我们用另一个容器nginx
做反向代理。我们的想法是,在我们的容器主机(Windows Server 2016)上,我们只安装Docker,而没有其他任何东西。所有配置都在容器中完成。这样我们可以轻松迁移到另一台主机。
这是Dockerfile为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
注意,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的。 (这将是罕见的)
例子:
- 用户浏览http://somesite.mydomain.com
- 我们的DNS重定向somesite.mydomain.com到ip我们的集装箱主机的
- 由于端口
80
暴露nginx的容器,请求去那里 - nginx将代理请求到
172.22.108.6
- 用户看到运行在容器上的网页ip
172.22.108.6
你也可以用IIS和ARR创建一个容器来替换nginx(这里的指南https://chris.59north.com/post/Combining-Windows-Server-2016-Container-ASPNET-5-and-Application-Request -Routing-(ARR) - 使用-泊坞)。但是我发现nginx更轻巧,更容易设置。 – Rubanov
- 1. golang docker容器的反向代理
- 2. 与nginx和docker容器实现反向代理与不同的端口
- 3. nginx反向代理可访问多个docker容器
- 4. 用于Docker容器的Nginx反向代理
- 5. NGINX反向代理与链接Docker容器
- 6. 如何将Docker容器端口+ http代理到子URL?
- 7. 为Docker容器指定linux接口
- 8. 安装容器反向代理
- 9. 如果我在Docker容器中运行Node.js,是否需要反向代理?
- 10. Docker-compose + Nginx SSL反向代理
- 11. 如何为自定义路由配置反向代理/负载均衡器
- 12. 在docker窗口上运行linux容器
- 13. 如何反向代理TFS服务器
- 14. 使用自定义基址URL为Keycloak泊坞窗配置反向代理
- 15. 使用nginx容器作为反向代理时的原始URL
- 16. 如何为Docker容器定义磁盘配额?
- 17. Artifactory:使用NetScaler作为Docker的反向代理
- 18. 从Docker部署Docker窗口容器到Windows Server 2016
- 19. 如何在Docker容器中向前端口?
- 20. Django作为反向代理
- 21. apache反向代理:如何转发代理服务器的HTTP_HOST
- 22. 在Docker容器中使用代理
- 23. 的httpd - 反向代理多个端口
- 24. 如何配置Nginx为反向代理服务器?
- 25. Apache反向代理内容长度
- 26. 代理窗口
- 27. 反向代理VS. 301重定向
- 28. Nginx反向代理重定向问题
- 29. Nginx反向代理301重定向
- 30. 如何在两个Docker容器之间创建一个nginx反向代理负载均衡?
您认为您的解决方案还适用于生产部署吗?你如何配置ARR?谢谢 –