1.启动docker时, 报如下问题
Reading the configuration file, at line 103
>>> 'logfile /var/log/redis/redis.log'
Can't open the log file: No such file or directory
我配置的日志文件没有找到, 尝试在宿主机创建好文件并授权读写权限未果. 其实这里报的没找到文件或路径是docker容器中没有. redis中的默认日志在 redis/data/之下. 可以先修改配置文件,不指定日志路径, 然后在启动容器成功后, 进入容器内部查看或创建自定义的日志文件.
此处我使用redis默认的路径,修改redis.conf的logfile为 /var/redis/data/redis.log. 注意在docker-compose或者启动时对应好数据卷
/var/redis/data:/var/redis/data
随后启动即可完成.
2. 配置redis主从
一开始使用如下配置
slaveof 0.0.0.0 6379
发现主从无法连接.原因是docker中每个容器都有独立的ip.使用docker inspect 容器ID可以查看.然后进行配置即可.
但是,容器ip是每次启动的时候随机给的.这不是一个最好的方案.
3.User-defined networks
创建一个自定义网络
docker network create redis-network
可以通过docker network ls 查看docker中的network
1.在docker-compose中指定加入的网络, 以及把redis-network声明成外部网络.
2.值得注意的是version >1的版本才能使用networks.
3.另外要指定容器名称 container_name
version: '2'
networks:
redis-network:
external: true #把redis-network声明成外部网络
services:
redis1:
container_name: redis1 #容器名称
image: redis
ports:
- 6379:6379
command: "/etc/redis/redis.conf"
volumes:
- /etc/redis:/etc/redis
- /var/redis/data:/var/redis/data
restart: always
networks: #指定加入的网络
- redis-network
redis2:
container_name: redis2
image: redis
ports:
- 6380:6380
command: "/etc/redis/redis6380.conf"
volumes:
- /etc/redis:/etc/redis
- /var/redis/data:/var/redis/data
restart: always
networks:
- redis-network
这样配置后, 我们在redis.conf中可以通过容器名称连接主redis
slaveof redis1 6379
启动之后,使用redis客户端查看info replication.看到配置的两个从redis已完成连接到主redis
完成主从配置.本文到此结束