Traefik - 无法为不同域公开具有相同端口的 redis docker 容器
Traefik - Unable to expose redis docker containers with the same port for different domains
我正在尝试为不同的环境设置一个带有 docker-compose 的 Redis。
因此我需要在同一个端口上使用 traefik 公开两个域:
- domain.com:6379
- 域-dev.com:6379
我无法在容器上公开这些端口,因为它们 运行 在同一台服务器上。
我的 docker-compose 文件(针对域开发)如下所示:
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" 时无法建立连接。
有人知道这个问题的解决方案吗?
Traefik 是http 的反向代理,不是tcp 负载均衡器。所以 traefik 本身(通常)打开端口 80 和 443 用于入口并将传入的 http 请求转发到给定的 http-able 后端。您在撰写服务标签中指定的端口是容器的端口,流量应该传递到。
因此,如果您 运行 端口 3000 上的 nodejs (http) 服务器,您将连接到 http://yourdomain:80
并且 traefik 会将请求转发到端口 3000 上的 nodejs 容器。这意味着通过在撰写服务上指定一个端口,您将不会在您的主机上打开这个端口。
在您的示例 运行ning redis 及其自定义协议中,traefik 不是解决方案,因为 traefik 仅进行 http 代理。要在您的主机上公开 redis(如果您真的想这样做),只需使用常规 docker 端口映射并将您的域指向您的 docker 主机。这样做,就无法对不同的域使用相同的端口,只需为两个实例指定两个不同的端口即可。对于 http,这通过 traefik 检查 http 请求并根据主机 header.
进行路由来工作
Traefik 2.0 将支持 TCP:https://github.com/containous/traefik/pull/4587
在那之前,您必须使用 NGINX 或类似软件。
我正在尝试为不同的环境设置一个带有 docker-compose 的 Redis。 因此我需要在同一个端口上使用 traefik 公开两个域:
- domain.com:6379
- 域-dev.com:6379
我无法在容器上公开这些端口,因为它们 运行 在同一台服务器上。
我的 docker-compose 文件(针对域开发)如下所示:
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" 时无法建立连接。
有人知道这个问题的解决方案吗?
Traefik 是http 的反向代理,不是tcp 负载均衡器。所以 traefik 本身(通常)打开端口 80 和 443 用于入口并将传入的 http 请求转发到给定的 http-able 后端。您在撰写服务标签中指定的端口是容器的端口,流量应该传递到。
因此,如果您 运行 端口 3000 上的 nodejs (http) 服务器,您将连接到 http://yourdomain:80
并且 traefik 会将请求转发到端口 3000 上的 nodejs 容器。这意味着通过在撰写服务上指定一个端口,您将不会在您的主机上打开这个端口。
在您的示例 运行ning redis 及其自定义协议中,traefik 不是解决方案,因为 traefik 仅进行 http 代理。要在您的主机上公开 redis(如果您真的想这样做),只需使用常规 docker 端口映射并将您的域指向您的 docker 主机。这样做,就无法对不同的域使用相同的端口,只需为两个实例指定两个不同的端口即可。对于 http,这通过 traefik 检查 http 请求并根据主机 header.
进行路由来工作Traefik 2.0 将支持 TCP:https://github.com/containous/traefik/pull/4587
在那之前,您必须使用 NGINX 或类似软件。