![](/img/trans.png)
[英]Apache redirect to different port for docker container ( Redmine )
[英]port redirect to docker containers by hostname
我想從一台服務器設置為多個站點提供服務:
1. http://www.example.org => node.js-www (running on port (50000)
2. http://files.example.org => node.js-files (running on port 50001)
直到現在我才發現在使用靜態 ips 時讓 docker 做端口重定向。
實際上是否可以使用 docker 通過主機名進行端口重定向?
我使用免費的亞馬遜 EC2 實例。
謝謝博
編輯:我想讓多個節點應用程序在同一個端口上運行,但服務於不同的主機名。
據我所知 docker 沒有內置這樣的功能,也不應該。 要完成您想要做的事情,您可能需要某種反向代理,因此 node.js 或 nginx 可以。 Bouncy 可能是一個不錯的選擇: https : //github.com/substack/bouncy
GitHub 上有一個很棒的 docker 項目,jwilder 稱為nginx-proxy 。 這允許您通過僅將其端口 80/443 映射到主機而不是其他容器來創建一個執行反向代理的 docker 容器。 然后,您所要做的就是為您創建的每個新 Web 容器提供一個新的環境變量VIRTUAL_HOST=some.domain.com
。
一個例子:
創建一個新的 nginx-proxy 容器
docker run -d -p 80:80 --net shared_hosting -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
為每個網站創建一個容器。 例如:
docker run -d -p 80 --net shared_hosting -e VIRTUAL_HOST=hello1.domain.com tutum/hello-world docker run -d -p 80 --net shared_hosting -e VIRTUAL_HOST=drupal.domain.com drupal
您需要確保您擁有的主機在 DNS 中配置為指向運行 docker 容器的服務器。 在本例中,我將添加到/etc/hosts
文件中:
echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /etc/hosts
導航到http://hello1.domain.com ,然后導航到http://drupal.domain.com ,看到它們都使用端口 80 但為您提供不同的頁面。
關於此服務的重要說明。 正如您所注意到的,我添加了--net
參數,這是因為您希望成為共享主機(代理和網站)一部分的所有容器都必須位於同一個虛擬網絡上(這可以由參數--net
定義)或--network
到--network
docker run
命令),尤其是當您使用docker-compose
創建 docker 時,因為docker-compose
創建了自己的虛擬網絡,從而使另一個容器無法訪問,因此請確保網絡明確定義在docker-compose.yml
文件。
希望能幫助到你。
我知道這是一個老問題,但遇到了它並想指出有更清潔的方法來執行請求。 由於您使用的是 AWS,因此您可以讓兩個主機名中的每一個都指向 Route53 中各自的負載均衡器 (ELB)。 然后,您可以將容器部署到 ECS,例如,偵聽兩個端口。 這些負載均衡器中的每一個都可以將流量重定向到適當的偵聽端口。 現在你已經完成了你想要的,如果你的流量變得太重或不平衡,你可以輕松地將任務拆分為兩個不同的 ECS 集群,以便它們可以獨立擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.