在 Ubuntu 上使用 Podman 部署 Redis 7.2.15,并通过挂载宿主机的配置文件和 data 目录实现持久化,可以按以下步骤操作。这里以 Rootless Podman(普通用户运行) 为主,因为 Ubuntu 默认推荐这种方式。
一、创建宿主机目录与配置文件
# 在家目录下创建工作目录
mkdir -p ~/redis-7.2.15/conf
mkdir -p ~/redis-7.2.15/data
# 创建配置文件
vim ~/redis-7.2.15/conf/redis.conf
redis.conf 最小可用配置示例:
# 允许所有网络接口连接(生产环境请按需限制)
bind 0.0.0.0
# 设置访问密码(请替换为强密码)可注释,不用密码
#requirepass YourStrongPassword
# 开启 AOF 持久化
appendonly yes
# 数据目录(容器内路径,与挂载点对应)
dir /data
# 日志输出到标准输出,方便 podman logs 查看
logfile ""
注意:不要设置
daemonize yes,否则容器会立即退出。
二、拉取 Redis 7.2.15 镜像
podman pull docker.io/library/redis:7.2.15
三、调整宿主机目录权限(Rootless 关键步骤)
Redis 容器内进程以 UID 999(redis 用户)运行。在 Rootless Podman 下,必须让该 UID 能写入 data 目录。使用 podman unshare 调整属主:
podman unshare chown -R 999:999 ~/redis-7.2.15/data
配置文件只需要读权限,通常保持当前用户属主即可(容器内以 UID 999 读取,但挂载时默认可读)。如果遇到权限问题,可改为:
chmod 644 ~/redis-7.2.15/conf/redis.conf
Ubuntu 默认使用 AppArmor,不需要
:Z标签。若系统启用了 SELinux,则挂载时需加:Z。
四、启动 Redis 容器
podman run -d \
--name redis-7.2.15 \
-p 6379:6379 \
-v ~/redis-7.2.15/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro \
-v ~/redis-7.2.15/data:/data \
docker.io/library/redis:7.2.15 \
redis-server /usr/local/etc/redis/redis.conf
参数说明:
-
-p 6379:6379:映射端口。 -
-v .../redis.conf:/usr/local/etc/redis/redis.conf:ro:配置文件只读挂载。 -
-v .../data:/data:数据目录挂载,实现持久化。 -
最后指定
redis-server并加载自定义配置文件。
五、验证部署
# 查看容器状态
podman ps
# 进入 Redis CLI
podman exec -it redis-7.2.15 redis-cli
# 认证(如果配置了密码)
AUTH YourStrongPassword
# 测试
PING
SET test_key "hello"
GET test_key
验证持久化:重启容器后再次读取 test_key。
podman restart redis-7.2.15
podman exec -it redis-7.2.15 redis-cli
AUTH YourStrongPassword
GET test_key # 应返回 "hello"
六、开机自启(可选)
推荐使用 Quadlet(Podman 4.4+)创建 systemd 用户服务。
-
开启 linger:
sudo loginctl enable-linger $USER
-
创建 Quadlet 文件
~/.config/containers/systemd/redis.container:
[Unit]
Description=Redis 7.2.15 Container
After=network-online.target
[Container]
ContainerName=redis-7.2.15
Image=docker.io/library/redis:7.2.15
PublishPort=6379:6379
Volume=%h/redis-7.2.15/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro
Volume=%h/redis-7.2.15/data:/data
Exec=redis-server /usr/local/etc/redis/redis.conf
[Service]
Restart=always
[Install]
WantedBy=default.target
-
重载并启动:
systemctl --user daemon-reload
systemctl --user start redis.service
systemctl --user status redis.service
七、注意事项
| 问题 | 解决方案 |
|---|---|
| 容器启动后立即退出 | 检查配置文件中是否误设 daemonize yes,应改为 no 或删除 |
| 数据目录无法写入 | 执行 podman unshare chown -R 999:999 ~/redis-7.2.15/data |
| 连接被拒绝 | 确认 bind 0.0.0.0,并检查防火墙是否放行 6379 |
| 密码认证失败 | 确认 requirepass 值与 AUTH 输入一致 |
使用 sudo podman(Rootful) |
数据目录属主需改为 999:999,可直接 sudo chown -R 999:999 ~/redis-7.2.15/data |
按照以上步骤,即可在 Ubuntu 上通过 Podman 运行 Redis 7.2.15,并将配置与数据都保留在宿主机目录中。
浙公网安备 33010602011771号