参考文章:
https://www.jianshu.com/p/e64d01f0dd60
https://www.cnblogs.com/liyiran/p/11522114.html
- 拉取redis镜像
docker pull redis
- 从官网获取 redis.conf 配置文件,放到挂载目录/usr/local/docker/redis/redis.conf并修改以下前2项。
- 注意下面3项:
bind 127.0.0.1 #注释掉这部分,因为不注释掉的话限制redis只能本地访问
protected-mode no #改成no, 默认yes开启保护模式,限制为只能本地访问,所以改成no
daemonize no #不修改,就用默认no值,如果改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败,所以不修改
- docker启动redis
docker run -p 6379:6379 --name redis -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
#大佬给的方法,不用配置redis.config
docker run -d --privileged=true --restart=always -p 6379:6379 -v /usr/local/docker/redis/data:/data --name redis redis:latest redis-server --appendonly yes
- 解释:
-p 6379:6379 映射本地6379端口 :容器6379端口
--name redis 给容器命名redis
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf 挂载目录,冒号前是本地linux目录,冒号后是容器内目录
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis/redis.conf
--appendonly yes 开启redis 持久化
- 查看容器运行状况
docker ps -a
- 使用 docker exec -it redis /bin/bash进入redis
-
使用 redis-cli 可以测试连接
记录遇到的错误
#docker ps
查看容器状态的时候redis的状态一直是restarting一直重启
#查看redis的日志
docker logs redis
#发现这么一行Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>,理解的意思是aof文件损坏,想了一下原因,昨晚更新windows了...八成这个原因
#解决办法:直接删除容器,删除镜像,重新下载镜像重启
docker stop redis
docker rm redis
docker rmi redis:latest
docker pull redis
docker run -d --privileged=true --restart=always -p 6379:6379 -v d:\docker\redis\data:/data --name redis redis:latest redis-server --appendonly yes
#注意要删除d:/docker/redis/data目录下的aof文件,估计只删除这个文件重新run容器就行,但是没再尝试
#创建容器的时候报错WARNING: IPv4 forwarding is disabled. Networking will not work.
#这个错导致连接不上redis,但是在容器内部docker exec -it redis bash redis-cli能够使用
#我启动redis容器的命令
docker run -d --privileged=true --restart=always -p 6379:6379 -v /usr/docker/redis/data:/data --name redis redis:latest redis-server --appendonly yes
#解决办法
vim /usr/lib/sysctl.d/00-system.conf
#添加下面这行
net.ipv4.ip_forward=1
#重启network
systemctl restart network
#删除错误的重启重新执行启动redis的命令
docker stop redis
docker rm redis