解决方案
执行docker run
命令时不要使用参数–requirepass
docker部署redis流程(问题复现)
1. 启动redis容器
在服务器docker运行时,执行下列命令。(会自动在远程仓库下载镜像)
redis:
docker run \
--restart=always \
--privileged=true \
--log-opt max-size=100m \
--log-opt max-file=3 \
-p 6379:6379 \
--name redis_1 \
-v redis_conf:/etc/redis \
-v redis_data:/data \
-v /etc/localtime:/etc/localtime:ro \
-d redis:7.0.5 \
redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass 123456
–privileged=true 这个参数,容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
–restart=always 总是开机启动(可以改为其他形式或者直接取消 https://blog.csdn.net/chj_1224365967/article/details/109029856
–log是日志方面的(https://www.cnblogs.com/cxbhakim/p/8677928.html
-p 6379:6379 将6379端口挂载出去
–name 给这个容器取一个名字
-v 数据卷挂载
redis_conf:/etc/redis/redis.conf 这里是将 liunx 路径下的 redis_conf(docker会自动生成一个路径统一管理) 和redis下的redis.conf 挂载在一起。
redis_data:/data 这个同上
当宿主机为 Linux 系统时,我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中,这样可以保持容器和宿主机时区和时间一致。
-d 表示后台启动redis
redis 镜像名称
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的redis_conf
–appendonly yes 开启redis 持久化 (aof append only file)
注意这里的密码最好别设置,否则这里设置的密码的优先级会高于配置文件,以至于修改配置文件中的requirepass后,redis密码并没有被修改
–requirepass 123456 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置)
再执行docker ps
,容器启动成功后如下图所示。
2. 找到挂载在服务器上的文件路径
执行docker volume ls
,找到刚配置的volume名称。
然后执行docker volume inspect redis_conf
,会找到该redis_conf
在服务器上的路径。
在该目录下,放入文件redis.conf
。
3. 修改配置文件
自己新建一个文件,将下面的配置复制粘贴进去即可。(当然个人推荐去下载官方配置,不清楚的配置可以自行百度)
然后修改一下requirepass
再重启容器即可成功修改密码(注意: 如果执行docker run
命令时使用了参数–requirepass
,则修改了配置之后无法修改redis密码)。
# 默认情况bind=127.0.0.1只能接受本机的访问请求
# 不写的情况下,无限制接受任何ip地址的访问
# 生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉
# bind 192.168