簡體   English   中英

docker是否可以在同一台計算機的端口80上運行多個應用程序?

[英]Is it possible with docker to run more than one app on port 80 on the same computer?

我的想法是這樣。 我什至不需要碼頭工人來解決這個問題。 也許,我可以將nginx作為運行在端口80(Web應用程序的默認端口)上的反向代理運行,並使用不同的編程堆棧將它們定向到不同的應用程序。 換句話說,是Java EE服務器,Node.js服務器,Django應用程序和一些PHP應用程序。 在這種情況下,nginx會將請求提供給適當的應用程序。 那可能嗎?

第二種情況是將不同的IP地址附加到docker映像,以便每個IP地址可以在端口80(默認端口)上運行不同的應用程序。

如果這不起作用,我想我想為要在端口80上服務的每個環境都需要一個不同的VPS服務器。我既有一個可以為低流量站點提供服務的Linux開發服務器,又要每月購買VPS托管。 我希望避免為每個堆棧購買單獨的vps服務器帳戶,例如Java EE,Node.js,帶有Gunicorn的Python / Django和PHP應用程序。

預先感謝您的任何幫助/建議,布魯斯

您可以使用建議的兩種方法:

使用NGINX作為反向代理

在這種情況下,方法是只為每個Docker實例配置不同的server_name條目,然后從那里對Docker實例進行反向代理,例如:

server {
    listen 80;

    server_name your-server-name.com;

    location / {
        proxy_pass http://127.0.0.1:8082;
        include /etc/nginx/proxy_params;
    }
}

在前面的示例中,8082將是您的Docker實例的端口。

映射到不同的IP地址

如果需要,可以使用-p參數將docker端口轉發到特定IP。 確實,在啟動docker實例時,請使用以下命令:

-p IP:host_port:container_port or -p IP::port

用於為一個特定綁定設置外部接口

這在某種程度上取決於您將要處理Web服務的方式。 如果您有可能為它們設置單獨的子域,甚至URL前綴,那么您就已經涵蓋了NGINX-正如您已經猜到的那樣。 您正在尋找的配置選項是proxy_pass-可能與通過server_name指令為服務設置不同的子域結合使用。

假設您已經在本地主機上安裝了NGINX,在端口9000上的同一框中運行了一個django應用程序,並在端口6000上的192.168.0.1上安裝了Java EE服務器,就可以了。 像這樣: https : //gist.github.com/dreizehnelf/f92b23dea5245a3c322cdcea4e1cf362

(對不起,無法直接發布配置,因為stackoverflow將其中的所有http://東西都視為鏈接-而且我沒有足夠的聲譽點來發布兩個以上。)

暫無
暫無

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

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