文章目录
- 前言
- Docker-compose部署redis的正确方式
- Docker-compose.yml 文件
- 文件目录结构
- redis.conf 关键信息
- docker-compose 启动
- 启动后用redis-cli连接server
- 问题列表
- redis启动失败
- 原因 & 解决方案
- 误打误撞地启动成功了
- redis /data 数据目录挂载失败
- 原因
- 设置权限的两种方式
- 小结
前言
最近在尝试用docker部署项目,在尝试启动Redis容器时各种起不来,卡了一段时间,特此记录下解决过程。
Docker-compose部署redis的正确方式
Docker-compose.yml 文件
services:
redis:
image: redis:6.2
container_name: redis6
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- "6378:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data:rw
- ./logs:/logs
command: redis-server /usr/local/etc/redis/redis.conf --requirepass "123456"
文件目录结构
说明:
文件名 | 描述 |
redis.cnf | 配置文件 |
data | 数据文件目录 |
docker-compose.yml | 用来启动redis容器 |
logs | 日志文件目录 |
redis.conf 关键信息
# bind 127.0.0.1
daemonize no
logfile /logs/redis.log
appendonly yes
说明:
配置项 | 描述 |
bind | 指定本机网卡对应的IP地址,限制本机访问,默认 bind 127.0.0.1 |
daemonize | 指定是否为守护进程方式运行,默认值为no |
logfile | 指定日志文件路径,默认值为 logfile ’ ', 默认为控制台打印,并没有日志文件生成 |
appendonly | 是否开启持久化,默认值为no |
docker-compose 启动
# 前台启动容器,控制台会打印容器启动的日志信息,方便看异常信息
docker-compose up
启动后用redis-cli连接server
至此,一切顺利的话,redis服务就成功启动啦!
问题列表
redis启动失败
redis 启动失败,status 在不断的重启中,端口连接失败。
原因 & 解决方案
redis.conf 中设置了 daemonize yes
当daemonize 设置了yes,表示redis在后台运行,当执行docker-compose执行启动redis进程时,docker发现自己无事可做,容器自动结束,所以导致redis启动失败。
误打误撞地启动成功了
配置信息:
redis.conf 中 daemonize yes
docker-compose.yml:
目录结构:
可以看到新增redis目录,并且新增redis目录下 redis.conf 文件大小为0;
我分析启动成功的原因是在设置挂载目录时,设置了一个不存在的/redis/xx的目录,同样/redis/redis.conf 也不存在,推测可能是redis在启动的时候找不到配置文件,用了内置的默认文件,启动成功了~ 噗~
redis /data 数据目录挂载失败
观察到的现象是设置了appendonly=yes ,正常情况下会在data目录下生成appendonly.aof,但是在宿主机的data目录下未发现任何文件,这时候看redis日志如下:
原因
对于appendonly.aof文件没有写的权限
设置权限的两种方式
- 在宿主机的挂载目录下设置读写权限和操作用户组
- 在volumes 中设置读写权限
1、在宿主机的挂载目录下设置读写权限和操作用户组
sudo chown 999:999 /data
sudo chmod 777 /data
2、在volumes 中设置读写权限
volumes:
- ./data:/data:rw
进入容器查看/data目录权限:
在宿主机查看/data 目录:
小结
平时对于组件中间件的信息拿来就用,了解的少,思考的也少,导致了一个又一个的问题,希望自己越来越专业~