簡體   English   中英

端口通過主機名重定向到 docker 容器

[英]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

一個例子:

  1. 創建一個新的 nginx-proxy 容器

    docker run -d -p 80:80 --net shared_hosting -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
  2. 為每個網站創建一個容器。 例如:

     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
  3. 您需要確保您擁有的主機在 DNS 中配置為指向運行 docker 容器的服務器。 在本例中,我將添加到/etc/hosts文件中:

     echo "127.0.0.1 hello1.domain.com drupal.domain.com" >> /etc/hosts
  4. 導航到http://hello1.domain.com ,然后導航到http://drupal.domain.com ,看到它們都使用端口 80 但為您提供不同的頁面。

關於此服務的重要說明。 正如您所注意到的,我添加了--net參數,這是因為您希望成為共享主機(代理和網站)一部分的所有容器都必須位於同一個虛擬網絡上(這可以由參數--net定義)或--network--network docker run命令),尤其是當您使用docker-compose創建 docker 時,因為docker-compose創建了自己的虛擬網絡,從而使另一個容器無法訪問,因此請確保網絡明確定義在docker-compose.yml文件。

希望能幫助到你。

我使用 varnish 作為作為我的反向代理的 docker 容器

它在 docker 索引上

https://index.docker.io/u/sysdia/docker-varnish/

我知道這是一個老問題,但遇到了它並想指出有更清潔的方法來執行請求。 由於您使用的是 AWS,因此您可以讓兩個主機名中的每一個都指向 Route53 中各自的負載均衡器 (ELB)。 然后,您可以將容器部署到 ECS,例如,偵聽兩個端口。 這些負載均衡器中的每一個都可以將流量重定向到適當的偵聽端口。 現在你已經完成了你想要的,如果你的流量變得太重或不平衡,你可以輕松地將任務拆分為兩個不同的 ECS 集群,以便它們可以獨立擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM