Ubuntu20.04环境下Bitbucket Pipeline中redis-server无法启动问题求助
报错根因
Ubuntu 20.04对应的start-stop-daemon版本新增了安全校验规则,禁止操作权限为全局可写的PID文件,同时也禁止在全局可写的目录下匹配PID文件。Bitbucket Pipeline运行Docker容器时,默认会将/var/run目录挂载为权限777的tmpfs文件系统,哪怕你提前删除旧的PID文件,redis新生成的PID文件也会继承父目录的全局可写权限,触发校验规则导致启动失败。本地运行Docker时默认不会给/var/run挂载777权限的tmpfs,因此不会触发该问题。
可行修复方案
- 方案1:修改redis配置,指定PID文件生成到非全局可写的目录
修改/etc/redis/redis.conf中的pidfile配置项,将路径改为非/var/run下的目录,示例配置如下:
# 原配置 pidfile /var/run/redis/redis-server.pid # 修改后配置 pidfile /var/lib/redis/redis-server.pid
改完后再执行service redis-server start即可正常启动。
- 方案2:启动前修正
/var/run/redis目录的权限
在启动redis服务前执行以下两条命令,修正目录权限,避免PID文件继承全局可写权限:
chown redis:redis /var/run/redis chmod 755 /var/run/redis
再执行启动命令即可通过校验。
- 方案3:直接调用redis-server启动,跳过start-stop-daemon校验
不需要通过service包装启动,直接执行以下命令后台启动redis,可绕过start-stop-daemon的权限校验逻辑,适合Pipeline临时测试场景:
sudo -u redis redis-server /etc/redis/redis.conf --daemonize yes
内容的提问来源于stack exchange,提问作者Kristof Krenn
相关产品推荐
相关产品推荐

