问题描述
我构建了一个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]
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"]