Docker容器中使用supervisor遇权限拒绝错误求助
解决x11docker容器中supervisord日志权限拒绝问题
问题根源
x11docker默认以普通用户身份启动容器,而/var/log/supervisor/目录默认属于root用户,普通用户无写入权限,导致supervisord无法创建日志文件抛出权限错误。同时你的Dockerfile存在两处需修正的小问题:
apt-get update & apt-get install中的&应改为&&,否则update和install会并行执行,可能导致依赖安装失败- Ubuntu 22.04中Python3的pip包名是
python3-pip,而非python-pip3
方案1:调整supervisord日志路径到普通用户有权限的目录
修改supervisord.conf,将日志文件路径指向容器中普通用户有权限的目录(比如你设置的/data):
[supervisord] logfile=/data/supervisord.log ; 替换原/var/log/supervisor/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/var/run/supervisord.pid nodaemon=false minfds=1024 minprocs=200
同时修正Dockerfile中的apt命令:
FROM x11docker/xfce WORKDIR /data # 修正apt命令逻辑符与pip包名 RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ supervisor COPY startup.sh /usr/local/bin/startup.sh COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN chmod +x /usr/local/bin/startup.sh CMD ["/usr/bin/supervisord", "-n"]
方案2:修改日志目录权限
如果不想调整日志路径,可在Dockerfile中创建日志目录并赋予普通用户写入权限:
FROM x11docker/xfce WORKDIR /data RUN apt-get update && apt-get install -y \ python3 \ python3-pip \ supervisor # 创建日志目录并赋予所有用户写入权限,更安全的方式是指定x11docker默认用户user的归属 RUN mkdir -p /var/log/supervisor && chown -R user:user /var/log/supervisor COPY startup.sh /usr/local/bin/startup.sh COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN chmod +x /usr/local/bin/startup.sh CMD ["/usr/bin/supervisord", "-n"]
方案3:强制以root用户运行容器(不推荐)
若以上方案不适用,可在启动容器时添加--user root参数,让x11docker以root身份启动容器:
x11docker --user root 你的镜像名
此方式会降低容器安全性,仅建议用于测试场景。
内容的提问来源于stack exchange,提问作者Itzik.B
相关产品推荐
相关产品推荐

