主管不在容器内运行

问题描述

Supervisord在容器启动后未运行,我找不到我的设置有什么问题。 我已通过向容器输入bash进行检查,主管状态未运行。而且在docker日志中,我看不到受监管的运行日志。但是,如果输入container bash,然后手动启动,则一切正常。

最大的问题是我看不到任何错误

我的dockerfile:

1/(1 + math.exp(rarity - level))

supervisord.conf文件

###########
# BUILDER #
###########

# pull official base image
FROM python:3.8.5-buster as builder

# set work directory
workdir /usr/src/dodo

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    libpq-dev python3-dev \
    libxml2-dev libxslt1-dev \
    libldap2-dev libsasl2-dev libffi-dev \
    supervisor

# install dependencies
copY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/dodo/wheels -r requirements.txt

#########
# FINAL #
#########

# pull official base image
FROM python:3.8.5-buster

# create directory for the app user
RUN mkdir -p /home/dodo/webapp
RUN mkdir -p /var/log/supervisor

# create the app user
RUN groupadd -r app && useradd -r -g app app

# create the appropriate directories
ENV HOME=/home/dodo/webapp
ENV APP_HOME=/home/dodo/webapp/web
ENV ALFACENTER=/media/alfacenter
RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/staticfiles
workdir $APP_HOME

# install dependencies
RUN printf '#!/bin/sh\nexit 0' > /usr/sbin/policy-rc.d
RUN apt-get update && apt-get install -y libpq-dev supervisor
copY --from=builder /usr/src/dodo/wheels /wheels
copY --from=builder /usr/src/dodo/requirements.txt .
RUN pip install --no-cache /wheels/*

copY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# copy project
copY . $APP_HOME

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app users
# USER app

CMD ["/usr/bin/supervisord"]

Docker-compose文件

[supervisord]
nodaemon=true

[program:djangoWatcher]
command=/usr/local/bin/python3.8 /home/dodo/webapp/web/djangoWatcherRun.py
directory=/home/dodo/webapp/web
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/supervisord.err.log
stdout_logfile=/var/log/supervisord.out.log
user=app

解决方法

假设您要使用Compose启动容器,那么问题可能是command: gunicorn --workers=2 --threads=4 main.wsgi:application --bind 0.0.0.0:8000,您设置了另一个替代的启动命令。

我注意到不相关的问题:

  1. 您正在使用apt安装python3-dev软件包。您不应该这样做:官方python映像已经预先安装了Python和Python开发标头,因此您最终将获得两个版本的Python,这些版本可能会造成问题。

  2. RUN chown使您的图像更大,因为它基本上会再次复制所有这些文件。改为使用COPY --chown=app:app . $APP_HOME

,

我会说使用ENTRYPOINT docker命令而不是使用CMD在docker文件中运行您的超级用户将解决此问题。