java - 如何从本地主机连接到 docker redis 集群
问题描述
我使用脚本创建了 redis docker 集群:
cluster_creation.sh
#------------ bootstrap the cluster nodes --------------------
start_cmd='redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes'
redis_image='redis:5.0-rc'
network_name='docker-it-network'
docker network create $network_name
echo $network_name " created"
#---------- create the cluster ------------------------
for port in `seq 6379 6384`; do \
docker run -d --name "redis-"$port -p $port:6379 --net $network_name $redis_image $start_cmd;
echo "created redis cluster node redis-"$port
done
cluster_hosts=''
for port in `seq 6379 6384`; do \
hostip=`docker inspect -f '{{(index .NetworkSettings.Networks "docker-it-network").IPAddress}}' "redis-"$port`;
echo "IP for cluster node redis-"$port "is" $hostip
cluster_hosts="$cluster_hosts$hostip:6379 ";
done
echo "cluster hosts "$cluster_hosts
echo "creating cluster...."
echo 'yes' | docker run -i --rm --net $network_name $redis_image redis-cli --cluster create $cluster_hosts --cluster-replicas 1;
该脚本创建了集群,并且所有节点都已连接。
但是我无法通过我的 spring boot 应用程序连接到这个 redis 集群。我尝试使用 localhost:6379 , 127.0.0.1:6379, host.docker.internal:6379 但这些都不起作用。
如何在本地公开redis集群docker容器以供应用程序使用?
注意:应用程序没有在 docker 中运行。如果应用程序在 docker 中运行,我可以使用 redis 端点作为redis-6379:6379访问 redis 。但是无法使用 localhost:6379 从本地主机直接访问
错误:
gframework.data.redis.TooManyClusterRedirectionsException: No more cluster attempts left.; nested exception is redis.clients.jedis.exceptions.JedisClusterMaxAttemptsException: No more cluster attempts left.
码头工人检查码头工人网络:
{
"Name": "docker-it-network",
"Id": "46fc0aacb845bb6fddf36ba85f57f346414594730299cc28ff85a70e3bff1227",
"Created": "2021-08-06T14:37:59.189023848Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1105aea5de2ccaa4bdbd01b849c7ff0447299f407112e586ec3943596d2df2ef": {
"Name": "redis-6382",
"EndpointID": "a3f81288c528d37033ec3f091d00a879022558e58614fe9e73626dcaa136d68e",
"MacAddress": "02:42:ac:12:00:05",
"IPv4Address": "172.18.0.5/16",
"IPv6Address": ""
},
"233e19cbad6658a65593fcfc8d50688b9b88e7edc1d5f0b8d959ba640c9a3e74": {
"Name": "redis-6383",
"EndpointID": "e0703f96fd6efaef6a7ebf1af6e22151ae85418f62a501fb042ed58d5a364250",
"MacAddress": "02:42:ac:12:00:06",
"IPv4Address": "172.18.0.6/16",
"IPv6Address": ""
},
"3372eaf8ceb5b8024202f5bf0421b5ccc697ca6ccbcded5238b1ac05ef1d81bb": {
"Name": "redis-6381",
"EndpointID": "34e11bb16cd3c41aed6d75b35443d043ab7fedd5719b63c3be1d311fb6bfc9d0",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"45c0ac3378e4c85dfe766e030779c94c39028253744c734ba483154a0fe0d722": {
"Name": "redis-6384",
"EndpointID": "10e43a763b66727ce4f4fc4a90a6a057768772d2c97596454bf2ec4134cc18f7",
"MacAddress": "02:42:ac:12:00:07",
"IPv4Address": "172.18.0.7/16",
"IPv6Address": ""
},
"8e757a3c2dbb95f9b330fa7ea0bad6c0cf4485fbeeaae92be2e596bccc02b309": {
"Name": "redis-6379",
"EndpointID": "a4a236ca36f4704667c4634564c7b42e5b8d8c308e381efadb408fe11dfb221c",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"fdeace5cff0a5d8ccb5875863f97033426ce97e07224b5ec24b918a017b1701e": {
"Name": "redis-6380",
"EndpointID": "87c837fdcca1f2c8f7c23f369f61b2aa17014a63d21c10823563a6874526d76d",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
解决方案
推荐阅读
- c# - 导出 excel 文本格式 - oledbcommand
- android - Ionic Cordova Run Android 运行成功但手机上没有安装apk
- firebase - 次要应用:在具有多个应用的 Firebase 项目中使用电话身份验证
- node.js - 我应该如何将超级管理员添加到节点 typescript expressjs 应用程序
- javascript - 如何在 StrapiJS 中获取由字段创建和更新的字段?
- typescript - 如何在 Typescript Gatsby 中使用 ```gatsby-plugin-dark-mode```
- coldfusion - ParseDateTime 不会为 SQL Server 日期时间查询输出 ODBC 文字
- c - LinkedList Traversal 随机崩溃
- powerbi - 在 Power BI 中按类别筛选前 5 个
- python - 从列表定义创建 N 元表达式树