Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx 端口80上具有相同域的多个Docker容器_Nginx_Docker_Digital Ocean - Fatal编程技术网

Nginx 端口80上具有相同域的多个Docker容器

Nginx 端口80上具有相同域的多个Docker容器,nginx,docker,digital-ocean,Nginx,Docker,Digital Ocean,我的问题与问题类似,但只有一个域 是否可以在同一台服务器上运行多个docker容器,所有容器都在端口80上,但URL路径不同 例如: 在内部,所有应用程序都托管在同一个docker服务器上 172.17.0.1:8080 => app1 172.17.0.2:8080 => app2 172.17.0.3:8080 => app3 在外部,用户将通过以下URL访问应用程序: www.mydomain.com (app1) www.mydomai

我的问题与问题类似,但只有一个域

是否可以在同一台服务器上运行多个docker容器,所有容器都在端口80上,但URL路径不同

例如:

在内部,所有应用程序都托管在同一个docker服务器上

172.17.0.1:8080 => app1
172.17.0.2:8080 => app2
172.17.0.3:8080 => app3
在外部,用户将通过以下URL访问应用程序:

www.mydomain.com                 (app1)
www.mydomain.com/app/app2        (app2)
www.mydomain.com/app/app3        (app3)

我用nginx反向代理解决了这个问题

以下是nginx容器的
Dockerfile

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
这是
nginx.conf

http {

        server {
              listen 80;

              location / {
                proxy_pass http://app1:5001/;
              }

              location /api/ {
                proxy_pass http://app2:5000/api/;
              }
        }
}
然后,我将nginx、app1和app2容器放在同一docker网络中

确保在位置和代理路径中包含尾随的
/
,否则
nginx
将返回“502:坏网关”


所有请求都通过端口80上的docker主机,该主机将请求转交给nginx容器,然后nginx容器根据url路径将请求转发到应用程序容器。

您可以使用nginx设置到不同应用程序的路由。您可以参考此示例了解如何做到这一点-多个容器不能在同一端口上侦听。更一般地说,一个进程可以绑定到一个套接字(ip:port)。您的需要需要一个反向代理(如nginx)。@Auzias可以,每个代理都有自己的网络名称空间,因此它们能够执行完全相同的操作。但是,它们不能全部绑定到主机上的同一端口,因为同一端口只能使用一次。这里的解决方案是将每个容器绑定到主机上的其他端口,并使用nginx根据url进行路由