【问题标题】:Mulitple Docker Containers on Port 80 with Same Domain具有相同域的 80 端口上的多个 Docker 容器
【发布时间】:2016-07-23 11:14:11
【问题描述】:

我的问题类似于this 问题,但只有一个域。

是否可以在同一台服务器上运行多个 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设置路由到不同的应用程序。你可以参考这个例如如何做到这一点 - stackoverflow.com/questions/19108044/…
  • 多个容器不能在同一个端口上监听。更一般地说,一个单独的进程可以绑定到一个套接字(ip:port)。您需要一个反向代理(如 nginx)。
  • @Auzias 他们可以,每个人都有自己的网络命名空间,因此他们能够执行完全相同的操作。但是,它们不能都绑定到主机上的同一个端口,因为同一个端口只能使用一次。这里的解决方案是将每个容器绑定到主机上的其他端口,并使用 nginx 根据 url 进行路由

标签: nginx docker digital-ocean


【解决方案1】:

我使用 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/;
              }
        }
}

然后我在同一个 docker 网络中建立了 nginx、app1 和 app2 容器。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多