是否可以使用docker在同一台计算机上的端口80上运行多个应用程序?

时间:2016-10-24 10:23:08

标签: php python node.js django nginx

我的想法是这样的。我甚至可能不需要泊坞机来解决问题。也许,我可以将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应用程序。

提前感谢您的任何帮助/建议, 布鲁斯

2 个答案:

答案 0 :(得分:1)

您可以使用建议的两种方法:

使用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

用于设置一个特定绑定的外部接口

答案 1 :(得分:1)

这取决于您将如何处理Web服务。如果您有可能为它们设置单独的子域甚至URL前缀,NGINX - 正如您已经猜到的那样 - 让您满意。您正在寻找的配置选项是proxy_pass - 可能与通过server_name指令为服务设置不同的子域一起使用。

所以说你已经在localhost上安装了NGINX,在端口9000上的同一个盒子上运行的django应用程序和端口6000上的192.168.0.1上的Java EE服务器,你可以做某事。像这样:https://gist.github.com/dreizehnelf/f92b23dea5245a3c322cdcea4e1cf362

(抱歉,无法直接发布配置,因为其中的所有http://内容被stackoverflow视为链接 - 而且我没有足够的信誉点来发布超过两个。)