错误:无法删除非 root 用户的权限:容器在 Google Cloud Compute Engine 上不断重新启动

Sam*_*der 5 php nginx google-compute-engine docker alpine-linux

我已经搜索过,但似乎找不到此错误的答案。创建新虚拟机时出现“错误:无法删除非 root 用户的权限”。

容器不断重新启动。它在我本地的 MacOS 机器上运行得很好。

我正在尝试在具有容器优化操作系统的 Google Compute Engine VM 上运行该映像。我正在使用 nginx、php-fpm 和 alpine。

Supervisord.conf 文件如下所示:

[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
pidfile=/run/supervisord.pid
user=root

[program:php-fpm]
command=php-fpm8 -F
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autostart=true
autorestart=true
priority=5
stdout_events_enabled=true
stderr_events_enabled=true

[program:nginx]
command=nginx -g 'daemon off;'
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
autorestart=false
startretries=0
Run Code Online (Sandbox Code Playgroud)

有人也遇到过这个错误吗?

Woj*_*k_B 7

这看起来像是您正在尝试以非 root 身份启动 Supervisor。

您的配置文件告诉 Supervisor 以 root 身份运行,但如果您以非 root 用户身份启动它,则它无法以 root 权限启动进程。由于安全原因,在3.3.4版本中进行了更改:

修复了如果配置文件的 [supervisord] 部分指定 user= 但对该用户的 setuid() 失败,supervisord 将继续启动的错误。如果它不能放弃特权,它现在将立即退出。

看看这个讨论

您可以完全删除user=root,这将允许supervisord 以root 或非root 身份启动。当以 root 身份运行时,这会产生在日志中打印警告消息的副作用,因为我们建议在以 root 身份运行时使用 user= 。假设 Supervisord 启动的环境包含该变量USER并将其设置为当前用户,您应该能够以user=%(ENV_USER)s任一用户身份运行。

服务器故障中讨论了另一个类似的问题。