无法在 Docker 容器中运行 nginx 和 gunicorn

无法在 Docker 容器中运行 nginx 和 gunicorn

我是 Docker 新手,正在尽力弄清楚每一个细节,但使用 Dockerfile 启动 gunicorn 和 nginx 时却遇到了很大困难。每当我添加最后四行时,容器都不会启动,并且会失败,没有任何错误消息。

FROM python:3.9-buster

EXPOSE 80

RUN apt update
RUN apt upgrade
RUN apt install nginx python3 python3-pip git swig python3-dev build-essential libmagic-dev -y
RUN apt install ffmpeg -y
RUN mkdir /opt/xxx
RUN git clone https://xxx:[email protected]/xxx/backend.git /opt/xxx/
RUN mkdir /root/d12f
RUN python3 -m pip install --upgrade pip
COPY .env /opt/xxx/xxx/.env
RUN pip3 install -r /opt/xxx/requirements.txt
RUN pip3 install gunicorn
RUN git clone https://xxx:[email protected]/xxx/configs.git /root/configs/
RUN cp /root/configs/nginx/default /etc/nginx/sites-available/.
RUN mkdir /var/log/celery/
CMD /usr/sbin/nginx -c /etc/nginx/nginx.conf
CMD /usr/local/bin/celery -A xxx --workdir /opt/xxx worker --loglevel=INFO -P prefork &
CMD /usr/local/bin/celery -A xxx --workdir /opt/xxx beat --schedule=/tmp/celerybeat-schedule --loglevel=INFO
CMD /usr/bin/gunicorn --chdir /opt/xxx --conf xxx:gunicorn_conf xxx:wsgi

构建工作按预期进行,但使用 docker run -p 80:80 xxx:latest 运行却不行。

答案1

Dockerfile不是 shell 脚本。每个脚本只能有一个CMD指令Dockerfile参考)。nginx默认情况下,分叉守护进程(例如,哪些守护进程会切换到后台)将导致容器立即终止。

相关内容