我在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. Docker Nginx反向代理
- 3. 自定義反向代理
- 4. 與nginx和docker容器實現反向代理與不同的端口
- 5. nginx反向代理可訪問多個docker容器
- 6. NGINX反向代理與鏈接Docker容器
- 7. 用於Docker容器的Nginx反向代理
- 8. 如何將Docker容器端口+ http代理到子URL?
- 9. 爲Docker容器指定linux接口
- 10. WordPress容器的反向代理
- 11. 安裝容器反向代理
- 12. 如果我在Docker容器中運行Node.js,是否需要反向代理?
- 13. Docker-compose + Nginx SSL反向代理
- 14. 在docker窗口上運行linux容器
- 15. 如何爲自定義路由配置反向代理/負載均衡器
- 16. 如何反向代理TFS服務器
- 17. 您是否可以將nginx反向代理用於docker容器而不暴露任何端口?
- 18. 使用自定義基址URL爲Keycloak泊塢窗配置反向代理
- 19. 如何爲Docker容器定義磁盤配額?
- 20. 使用nginx容器作爲反向代理時的原始URL
- 21. 從Docker部署Docker窗口容器到Windows Server 2016
- 22. 如何在Docker容器中向前端口?
- 23. 如何處理nginx反向代理https http方案重定向
- 24. 如何使用最小服務器爲靜態內容提供反向代理?
- 25. Django作爲反向代理
- 26. 如何在Docker容器中綁定特定的接口?
- 27. apache反向代理:如何轉發代理服務器的HTTP_HOST
- 28. 在Docker容器中使用代理
- 29. 訪問Docker容器中的MQTT代理
- 30. 對Docker容器的webpack-dev-server代理
您認爲您的解決方案還適用於生產部署嗎?你如何配置ARR?謝謝 –