【问题标题】:Docker-compose multiple services listen on same port, different domainsDocker-compose 多个服务监听同一个端口,不同的域
【发布时间】:2020-11-28 13:08:49
【问题描述】:

如何让多个 docker 服务监听相同的端口,只使用不同的域?

甚至可以在docker-compose 中定义,还是我只需要一个服务监听端口,然后根据域将流量重新路由到相应的服务?


这个例子失败了,因为它监听的是整个网络(而不仅仅是域)

docker-compose up
Creating network "test-docker_default" with the default driver
Creating test-docker_static_1 ... done
Creating test-docker_app_1    ... 
Creating test-docker_app_1    ... error

ERROR: for test-docker_app_1  Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated

ERROR: for app  Cannot start service app: driver failed programming external connectivity on endpoint test-docker_app_1 (ef433ffad1af01ffa31cd8a69a8c15b69ca7e7b6935924d34891b92682570e68): Bind for 0.0.0.0:80 failed: port is already allocated

docker-compose.yml

version: '3.3'
services:

  app:
    image: node
    depends_on:
      - static
    networks:
      default:
        aliases:
          - app.localhost
    ports:
      - 80:80

  static:
    image: nginx
    networks:
      default:
        aliases:
          - static.localhost
    ports:
      - 80:80

/etc/hosts

127.0.0.1    app.localhost
127.0.0.1    static.localhost

【问题讨论】:

    标签: docker docker-compose network-programming


    【解决方案1】:

    您只能将一个容器映射到主机的同一端口。如果你想在同一个主机端口上映射 2 个服务,你应该使用像 Traefik 这样的反向代理(与 docker 很好地集成)。反向代理将监听主机的 80 端口,然后根据一些定义的规则(如别名、url 路径)转发到未映射到主机的端口上的特定 docker 容器。

    【讨论】:

      【解决方案2】:

      您应该使用反向代理。例如,您可以在 dockerhub.io 上查看 jwlider/nginx,文档非常好!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-26
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        • 2013-06-17
        • 2017-03-30
        • 1970-01-01
        相关资源
        最近更新 更多