当前位置: 首页 > 知识库问答 >
问题:

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

南门正祥
2023-03-14

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

  • 域。通讯: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配置为使用以下endpoint:

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

当连接到“domain-dev.com:6379”时,无法断开连接。

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

共有2个答案

邬楚青
2023-03-14

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

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

冯德宇
2023-03-14

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请求并基于主机头进行路由来实现。

 类似资料:
  • 问题内容: 为什么将两个使用相同方法的命名接口视为不同的接口,又如何避免呢? 假设我们有一个喜欢吃产品的人(食者)。他不在乎产品是什么,他只想指出从哪里可以买到新产品。换句话说,他想要产品服务,但并不关心产品服务将生产什么产品。在具体的实现中,我们将尝试用苹果喂他,因此我们将为他提供appleService。 结果如下: 接口和具有相同的方法,除了golang之外,别无其他。为什么以及如何避免这种

  • 我有一个依赖于多个docker容器的应用程序。我使用docker撰写,以便所有容器都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器中监听相同的端口8080,但是映射到主机上的不同端口: 8072,8073。对于集装箱间的通信,因为我们使用集装箱的端口,这会引起问题吗? 限制条件: 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络 所有容器都

  • 问题内容: 在以下代码中,我不明白为什么当它属于两个不同的对象时具有相同的ID? 问题答案: 我认为这是正在发生的事情: 取消引用时,将在内存中创建其副本。该存储位置由以下位置返回 由于没有引用到刚刚创建的方法的副本,因此GC将其回收,并且该内存地址再次可用 取消引用时,将在相同的内存地址(可用)中创建它的副本,您可以再次使用该地址。 第二个副本是GCd 如果您要运行一堆其他代码并再次检查实例方法

  • 问题内容: 我以为运算符检查对象的相等性。但事实并非如此: 问题答案: *Python *将相同的内存 位置用于方法和,这是*两个对象,它们的生命周期不重叠,因此对它们返回相同的标识。请参阅下面的详细说明。 从is运算符的文档中: 运算符是否测试对象标识:并且仅当x和y是同一对象时,x is y才是true。 从ID的文档中 返回对象的“身份”。这是一个整数(或长整数),在此对象的生存期内,此整数

  • 我刚刚在我的kubernetes集群上部署了graylog。 我需要能够公开udp端口作为入口规则,在graylog下。本地主机/gelf。目前,我的服务包括: 我的服务如下: 我的入口控制器是traefik。

  • 问题内容: 考虑以下示例: 失败并出现以下错误 为什么呢 生成的方法没有重叠。事实上,这实际上意味着 那里没有重叠。那为什么会失败呢? 如果您想知道我在做什么,并且有更好的解决方案:我有一堆Event和Listener接口,它们几乎与上述类完全一样。我想创建一个适配器和一个适配器接口,为此,我需要使用特定事件扩展所有Listener接口。这可能吗?有一个更好的方法吗? 问题答案: 不,你不能。这是