Docker部署redis:从零开始Docker部署
为什么用Docker部署Redis
Docker能让你在几分钟内拉起一个隔离的Redis环境,不用管依赖和编译。
尤其适合本地测试、快速搭建开发环境,或者在生产中通过容器编排统一管理。
本文会带你从零跑通一个带密码、能持久化的Redis实例。
准备工作:安装Docker并拉取镜像
先确保你的服务器上已经装好了Docker。
如果你的系统是CentOS 7+或Ubuntu 20.04+,直接用官方一键脚本:
curl -fsSL https://get.docker.com | sudo sh
装完启动Docker并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
验证Docker是否正常工作:
docker --version
接着拉取Redis官方镜像(默认拉取最新版,你也可以指定版本号如 redis:7):
docker pull redis
拉取完成后可以用 docker images 看到redis镜像。
快速部署单机Redis(带密码和端口映射)
启动一个最简单的Redis容器,同时设置密码并映射宿主机端口6379到容器6379:
docker run -d \
--name my-redis \
-p 6379:6379 \
redis redis-server --requirepass yourpassword
-d后台运行--name容器名字,方便管理-p宿主机端口:容器端口- 最后的
redis-server --requirepass yourpassword是覆盖容器默认启动命令,直接设置密码
如果你的宿主机6379端口已被占用,换成其他端口比如 -p 6380:6379。
重要避坑:持久化与配置文件挂载
默认启动的容器没有保存数据,容器删除后数据全丢。
生产环境一定要做持久化。
推荐用官方推荐的挂载宿主机目录到容器 /data,并开启RDB和AOF。
首先创建宿主机数据目录和配置文件:
mkdir -p /data/redis/conf
mkdir -p /data/redis/data
然后写一个自定义的 redis.conf 文件放在 /data/redis/conf/ 下(如果你不需要特别配置也可以用内建配置,但持久化必须挂载data目录):
# 基础配置
port 6379
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
# 持久化
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
# 密码(建议在命令行传参,避免conf泄露密码)
# requirepass yourpassword
然后用挂载方式启动容器:
docker run -d \
--name my-redis-persist \
-p 6379:6379 \
-v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis/data:/data \
redis redis-server /usr/local/etc/redis/redis.conf \
--requirepass yourpassword
-v挂载配置和数据目录- 注意配置中的
daemonize no,因为容器内必须前台运行 - 密码在命令行追加
--requirepass,这样配置文件中可以不写密码,更安全
检验数据持久化:往Redis写一条数据,然后删除容器重建一个新容器(用相同镜像和挂载),看数据是否还在。
验证连接与常见问题解答
验证连接
用宿主机上的 redis-cli(如果没有安装可以用 docker exec 进入容器):
# 进入容器内部
docker exec -it my-redis-persist redis-cli
# 授权
AUTH yourpassword
# 测试
PING
# 返回 PONG 则正常
也可以远程连接(防火墙放行6379端口后):
redis-cli -h 你的服务器IP -p 6379 -a yourpassword
常见问题与排查
Q1:启动容器后立即退出,docker logs my-redis 显示权限错误?
大概率是挂载的配置文件权限问题。宿主机上的 redis.conf 只需要可读(644即可),不要设置成 777。同时确认目录 --volume 的路径是否正确。
Q2:连接时报 DENIED Redis is running in protected mode?
因为没有设置密码且绑定了 127.0.0.1。解决方法:启动时加 --requirepass 密码,并且用 --bind 0.0.0.0 允许外部连接(注意仅限安全环境)。
Q3:AOF文件损坏无法重启?
如果容器异常断电导致AOF文件损坏,可以用 redis-check-aof --fix /data/redis/data/appendonly.aof 修复。修复前建议先备份。
Q4:如何修改密码?
不需要修改配置文件,直接停止容器后,重新执行 docker run 时更换 --requirepass 参数即可。注意旧数据不会丢失,但原客户端需要用新密码连接。
总结
Docker部署Redis的核心步骤就是拉取镜像、配置持久化、设置密码、验证连接。
新手最常踩的坑是忘记挂载数据目录导致重启丢失,以及端口映射冲突或配置文件权限问题。
按本文步骤操作,遇到异常先看 docker logs 输出,大多能定位到原因。
如果你正在处理线上环境,建议再加上资源限制(--memory)和日志轮转等细节。