Traefik - 无法为不同的域公开具有相同端口的redis docker容器

问题描述 投票:2回答:2

我正在尝试使用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
2个回答
1
投票

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

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

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


0
投票

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

在此之前,您必须使用NGINX或类似产品。

© www.soinside.com 2019 - 2024. All rights reserved.