UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations

Viewed 14364

I have built one docker image docker build -t ds_backend . with all configuration mentioned after the error below.

While trying to run the image using docker run ds_backend and its giving following error.

/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

Here is my configuration files

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 file

[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.
2 Answers

By design:

  • docker containers run as root if no USER is specified
  • supervisor does not allow running the daemon as root, without specifying it explicitly in the config files.

So you can either run supervisor as a user other than root or just add the user=root directive into the configs.

[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

I had the same problem. user=root & supervisord with -n (daemon mode) helped me.

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