我设置了一个包含6个节点的Redis集群,如下所示。在redis-集群文档中,必须使用network_mode host。
version: "3.9"
services:
redis0:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7000
PORT_BUS_CONFIG: 8100
network_mode: "host"
redis1:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7001
PORT_BUS_CONFIG: 8101
network_mode: "host"
redis2:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7002
PORT_BUS_CONFIG: 8102
network_mode: "host"
redis3:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7003
PORT_BUS_CONFIG: 8103
network_mode: "host"
redis4:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7004
PORT_BUS_CONFIG: 8104
network_mode: "host"
redis5:
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile-base
args:
PORT_CONFIG: 7005
PORT_BUS_CONFIG: 8105
network_mode: "host"
redis-cluster:
tty: true
build:
context: .
dockerfile: ./DockerFile_Builders/Redis/Dockerfile
#hostname: redis-server
depends_on:
- redis1
- redis2
- redis3
- redis4
- redis5
network_mode: "host"
user_service:
depends_on:
- "redis-cluster"
links:
- "redis-cluster"
build:
context: .
dockerfile: DockerFile_Builders/Services/User/Dockerfile现在,当我尝试使用以下方法连接时,需要从user-service容器连接到Redis集群:
RedisURI masterURI = RedisURI.create("redis://redis-cluster:7001");我得到以下错误:
19:57:28.329生菜-epollEventLoop-4-1警告com.lambdaworks.redis.cluster.topology.ClusterTopologyRefresh -无法连接到redis-群集/:7003 chat_service_1 java.util.concurrent.CompletionException: java.net.UnknownHostException: redis-群集
但是,当user-service在本地启动(没有码头容器),而Redis集群仍然位于docker容器中时,通常使用以下方法建立连接:
RedisURI masterURI = RedisURI.create("redis://localhost:7001");发布于 2021-06-12 20:37:08
我不是Java开发人员,但看起来您正在使用Docker Compose服务名为您的Redis集群构建DSN。
redis://redis-cluster:7001docker-compose.yml文件中的
redis-cluster是服务的名称
Docker通过自己的嵌入式DNS服务器在自己的网络中提供这样的主机名。在使用主机网络模式时,没有Docker网络,这通常是在docker-compose.yml中声明的。
这意味着您必须使用当前计算机已知的主机名。在开发期间,您可以继续使用localhost。在部署时,根据应用程序的体系结构,我认为您必须使用生产服务器的私有/公共IPv4地址。
使用Docker /Sward使用多个配置文件管理多个环境很容易。
https://stackoverflow.com/questions/67952623
复制相似问题