docker - Docker swarm redis 连接问题
问题描述
我有以下docker-compose.yml
redis 配置。
version: '3.5'
services:
db:
image: redis:latest
command: redis-server --bind 0.0.0.0 --appendonly yes --protected-mode no
ports:
- target: 6379
published: 6379
protocol: tcp
mode: ingress
有两个主机leader-0
(经理)和redis-0
(工人)
> root@leader-0:~# docker node ls
ID HOSTNAME STATUS
46tmallxr4l8xr7i90vlwntjq * leader-0 Ready
mofbedj4sqlxgnyatbxhlokc7 redis-0 Ready
Redis 主机redis-0
按预期在 localhost 上公开 6379 端口:
> root@redis-0:~# redis-cli -h 127.0.0.1 ping
PONG
但是 6379 在管理器上不可用(尽管应该):
> root@leader-0:~# redis-cli -h 127.0.0.1 ping
Could not connect to Redis at 127.0.0.1:6379: Connection timed out
有趣的部分是:
Connection timed out
(不拒绝)。redis-cli -h 127.0.0.1 ping
在其他工作主机上按预期工作(返回PONG
)。
Docker overlay mash 网络应该在每个主机的本地接口上公开 6379 端口,但看起来出了点问题,我搞砸了到底是什么。
manager 主机上的其他服务正常工作(我可以
curl http://localhost:${SERVICE_PORT}/
)。
Manager 主机与工作主机具有相同的防火墙规则(+ 额外的端口打开)
解决方案
推荐阅读
- jquery - 为什么 jQuery AJAX Post Content-Type=application/json 到 MVC 控制器操作方法导致空参数
- arrays - 我如何让这个 IF 与数组一起工作?
- node.js - 如果当前运行时支持,请使用顶级等待
- mysql - 如何将产品计数到多个过滤器
- arrays - 16位无符号整数数组输出比c中初始化大小更多的元素
- angular - 使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()
- algorithm - 如何解决排列框以获得最小高度问题以及使用哪种算法?
- react-native - 无法导航到嵌套在 DrawerNavigator 中的 StackNavigator
- angular - Angular:来自 Observable 订阅的相对导航
- serverless-framework - 如何在 serverless.ts 文件中设置 provider.apiGateway.shouldStartNameWithService?