UserWarning:Supervisord以root身份运行,并且正在默认位置搜索其配置文件

问题描述

我构建了一个docker映像docker build -t ds_backend .,其中包含以下错误之后提到的所有配置。

尝试使用docker run ds_backend运行映像时,出现以下错误

/usr/lib/python2.7/dist-packages/supervisor/options.py:461: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
2020-08-27 01:53:36,963 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root,you can set user=root in the config file to avoid this message.
2020-08-27 01:53:36,966 INFO supervisord started with pid 1

这是我的配置文件

Dockerfile

FROM python:3.6

MAINTAINER Dockerfiles

RUN mkdir /trell-ds-framework
workdir /trell-ds-framework
ADD . /trell-ds-framework/
RUN python3 setup.py bdist_wheel
# install uwsgi Now because it takes a little while
RUN pip3 install uwsgi
# copy over our requirements.txt file
# upgrade pip and install required python packages
RUN pip3 --no-cache-dir install -U pip
RUN apt-get install -y ca-certificates
RUN apt-get update && \
    apt-get install -y software-properties-common && \
    rm -rf /var/lib/apt/lists/*
# RUN add-apt-repository universe
RUN apt-get update
RUN apt-get install -y supervisor
RUN apt-get install -y ca-certificates supervisor
copY supervisor_app.conf /etc/supervisor/conf.d/supervisord.conf
RUN apt-get update && apt-get -y install cron
RUN pip3 --no-cache-dir install -r requirements.txt
RUN python3 -c "import nltk;nltk.download('stopwords')"
# setup all the configfiles
# RUN echo "daemon off;" >> /etc/Nginx/Nginx.conf
# RUN /usr/sbin/Nginx -g "daemon off;"
copY Nginx_app.conf /etc/Nginx/sites-available/default
copY supervisor_app.conf /etc/supervisor/conf.d/


# add (the rest of) our code

EXPOSE 80
# CMD ["supervisord"]
CMD ["/usr/bin/supervisord"]

supervisor_app.conf

[supervisord]
nodaemon=true
user=root


[program:uwsgi]
command = /usr/local/bin/uwsgi --ini /trell-ds-framework/uwsgi.ini
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[program:Nginx]
command = /usr/sbin/Nginx -g "daemon off;"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
daemon=off

Nginx_app.conf

server {
    listen 80 default_server;
    server_name ip;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    location / {
        include uwsgi_params;
        uwsgi_pass unix:///trell-ds-framework/app.sock;
    }
}

uwsgi.ini文件

[uwsgi]
callable = app
chdir = /trell-ds-framework
wsgi-file = /trell-ds-framework/wsgi.py
socket = /trell-ds-framework/app.sock
master = true
processes = 2
chmod-socket = 666
enable-threads = true
user=root
Can anybody guide me here if I am doing something wrong ? Any leads highly appreciated. Thanks.

解决方法

根据设计:

  • 如果未指定USER,则docker容器将以root身份运行
  • 在未在配置文件中明确指定守护程序的情况下,supervisor不允许以超级用户身份运行守护程序。

因此,您可以以root用户以外的用户身份运行超级用户,也可以仅将user=root指令添加到配置中。

[supervisord]
nodaemon=true
user=root


[program:uwsgi]
command = /usr/local/bin/uwsgi --ini /trell-ds-framework/uwsgi.ini
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
user=root

[program:nginx]
command = /usr/sbin/nginx -g "daemon off;"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
daemon=off
user=root ;here too if you want to

,

我有同样的问题。 user = root和-n(守护程序模式)的监督者帮助了我。

RUN echo user=root >>  /etc/supervisor/supervisord.conf
CMD ["/usr/bin/supervisord","-n"]