环境描述:在mac系统上安装docker及docker-compose服务,并且打算搭建一个redis集群
问题描述:mac默认不支持host网络模式,导致集群无法通过外部主机访问
具体验证步骤:
docker-compose.yml如下:
version: '3.8'
services:
master1:
container_name: master1
image: redis
volumes:
- ./master1/conf:/usr/local/etc/redis
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
network_mode: host
conf配置文件如下:
port 6380
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /data/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /data
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize no
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /data/run.log
loglevel notice
使用docker-compose up -d 启动redis容器,并查看如下
redis-cluster-host % docker ps |grep master1
7e69b709ffae redis "docker-entrypoint.s…" 7 seconds ago Up 6 seconds master1
进入容器中,使用命令查看redis连接正常:
redis-cluster-host % docker exec -it master1 bash
root@docker-desktop:/data# redis-cli -h 127.0.0.1 -p 6380 cluster nodes
3f98bb4d73ef44b6cd9daf40b1945ffa430fe798 :6380@16380 myself,master - 0 0 0 connected
mac上使用工具连接redis测试:
使用natstat:(宿主机上也没有看到端口监听占用)
netstat -nat |grep 6380
结论及现象:mac主机无法访问host模式下的redis服务
问题定位及解决方式:
访问docker官网查看host网络描述如下:
主机网络驱动程序仅适用于 Linux 主机,但在 Docker Desktop 4.29 及更高版本上作为 Beta 功能提供。
参考链接:主机网络驱动程序| Docker 文档
解决方式:
方式一:启动mac docker desktop的host networking
查看docker desktop的网络配置如下:
确实host networking没有打开,而且这个模式需要sign in才能打开
方式二:使用linux docker部署