【问题标题】:Traefik - Unable to expose redis docker containers with the same port for different domainsTraefik - 无法为不同域公开具有相同端口的 redis docker 容器
【发布时间】:2019-02-02 04:16:45
【问题描述】:

我正在尝试使用 docker-compose 为不同的环境设置 Redis。 因此,我需要在同一个端口上使用 traefik 公开两个域:

  • domain.com:6379
  • domain-dev.com:6379

我无法在容器上公开这些端口,因为它们在同一台服务器上运行。

我的 docker-compose 文件(用于 domain-dev)如下所示:

version: '2' 
services:
redis:
  container_name: redis-signalr-dev
image: redis
volumes:
  - ./redis-signalr-data:/data
restart: always
labels:
  - traefik.enable=true
  - traefik.backend=redis-signalr-dev
  - traefik.frontend.rule=Host:domain-dev.com
  - traefik.port=6379
  - traefik.docker.network=traefik_default
  - traefik.frontend.entryPoints=redis
networks:
  - traefik_default
volumes:
  redis-signalr-data:

networks: 
  traefik_default:
    external: true

我还尝试将 treafik 配置为使用以下端点:

--entrypoints='Name:redis Address::6379'

连接到“domain-dev.com:6379”时,无法建立连接。

有人知道这个问题的解决方案吗?

【问题讨论】:

    标签: redis docker-compose port reverse-proxy traefik


    【解决方案1】:

    Traefik 2.0 将支持 TCP:https://github.com/containous/traefik/pull/4587

    在那之前你必须使用 NGINX 或类似的。

    【讨论】:

      【解决方案2】:

      Traefik 是 http 的反向代理,而不是 tcp 负载均衡器。因此 traefik 本身(通常)打开端口 80 和 443 用于入口,并将传入的 http 请求转发到给定的支持 http 的后端。您在撰写服务标签中指定的端口是容器的端口,应该将流量传递到。

      因此,如果您在端口 3000 上运行 nodejs (http) 服务器,您将连接到 http://yourdomain:80,并且 traefik 会将请求转发到端口 3000 上的 nodejs 容器。这意味着通过在 compose 服务上指定端口,你不会在你的主机上打开这个端口。

      在您使用自定义协议运行 redis 的示例中,traefik 不是解决方案,因为 traefik 仅执行 http 代理。要在您的主机上公开 redis(如果您真的想这样做),只需使用常规 docker 端口映射并将您的域指向您的 docker 主机。这样做,没有办法在不同的域中使用相同的端口,只需为两个实例指定两个不同的端口。对于 http,这是通过 traefik 检查 http 请求并根据主机标头进行路由来实现的。

      【讨论】:

        猜你喜欢
        • 2018-04-15
        • 2016-07-23
        • 2018-03-25
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多