簡體   English   中英

如何托管在同一服務器上公開端口80的兩個Docker容器

[英]How to host two Docker containers exposing port 80 on the same server

我有兩個客戶端需要連接到端口80的網站。每個網站都在自己的容器中運行。 我想在同一個Docker主機上運行這兩個容器。

我知道端口80只能在主機上暴露一次。 有哪些解決方案具有最小的開銷/管理,這將允許我在同一主機上簡單地運行兩個容器(同時仍然允許客戶端到達端口80上的每個容器)?

網站1和網站2都應該在端口80上顯示客戶端Web瀏覽器並且具有友好URL(即:www.web1.com,www.web2.com)

使用nginx反向代理

  1. 在主機上安裝Nginx 在Debian / Ubuntu上: apt-get install nginx 注意:我假設您已經在主機上沒有apache或其他Web服務器......
  2. 對於每個站點,在目錄/etc/nginx/sites-available中編寫一個nginx站點文件,將該站點重定向到docker容器的http,該站點將在其他預先安排的端口上運行(例如,2001,2002,...)。 每個站點都有自己的文件,如下所示,但每個站點都有不同的預先安排的端口。 外部用戶將在相同IP地址但具有不同網站名稱的端口80訪問這些,並且從這些名稱中,nginx將無形地處理必要的內部連接。
  3. 符號鏈接站點文件,以便它們顯示在目錄/etc/nginx/sites-enabled並重新啟動nginx 稍后,如果您需要暫時禁用對站點的訪問,則可以刪除其中一個鏈接並重新啟動nginx。
  4. 通過向/etc/rc.local添加docker run命令,並將預先安排好的主機端口(localhost:2001)重定向到容器端口80,例如docker run -d -p localhost:2001:80 imageA在系統重啟時啟動容器

如果容器關閉,您將從nginx收到網關錯誤。 這可以自定義以顯示自定義HTML頁面。 為了更加健壯,最好在supervisord或其他重新生成死進程的進程管理器中管理容器。

以下是重定向到端口2001的示例nginx站點文件:

upstream dockerA { 
         server localhost:2001;
}

server {
       listen 192.168.1.8:80;  // REPLACE WITH HOST NUMERIC IP ADDRESS
       root /var/web/siteAstaticfiles;
       index index.html;
       server_name www.siteA.com;

       location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://dockerA;
        }               
}

在此示例中,雖然為站點A設置了HTML文件的本地磁盤目錄,但未使用它。 而是將所有請求發送到上游。 我沒有測試是否可以安全地省略rootindex行。

使用docker,docker-compose和nginx-proxy在單個主機上托管多個網站的更合適的方法: https//blog.florianlopes.io/host-multiple-websites-on-single-host-docker/

暫無
暫無

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

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