【问题标题】:uwsgi-nginx in docker not worksdocker中的uwsgi-nginx不起作用
【发布时间】:2019-01-03 22:42:52
【问题描述】:

我有像这样的 Dockerfile:

FROM python:3.6.5-jessie
MAINTAINER twitter myname

RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y nginx
RUN pip install --upgrade pip

RUN git clone https://github.com/hongmingu/requirements
RUN pip install -r /requirements/requirements_django.txt
RUN apt-get install -y vim

RUN mkdir -p /uwsgi_log

RUN git clone https://github.com/hongmingu/smaple_django

RUN apt-get install -y nginx

COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./uwsgi.ini /uwsgi.ini # it runs in daemonized mode
# These files are just setting files. nginx get request at port 8000 and uwsgi runs django project.

RUN uwsgi --ini /uwsgi.ini

RUN service nginx restart

CMD ["python3"]

我认为这两行不起作用:

RUN uwsgi --ini /uwsgi.ini
RUN service nginx restart

因为当我构建它并使用 linux 命令运行它时:sudo docker run --rm -it -p 8080:8000 hongmingu/smaple:0.1 /bin/bash 我的 127.0.0.1:8080 不起作用。但是,当我手动附加容器并键入命令时,例如uwsgi --ini /uwsgi.iniservice nginx restart,效果很好。

那么,是不是不能在Dockerfile中运行uwsgi、nginx?

我想这样做,希望我不需要手动运行uwsgi和nginx。

我在哪里做错了?有什么好办法吗?

这个 docker 镜像(hongmingu/smaple:0.1)在这里:https://cloud.docker.com/u/hongmingu/repository/docker/hongmingu/smaple

【问题讨论】:

  • 您应该广泛地假设像service 这样的命令不会在 Docker 中运行。尝试重新启动 Dockerfile 中的服务当然没有任何意义,因为 Docker 映像不包含任何正在运行的进程,仅包含文件系统内容。考虑将其分解为两个单独的图像,每个图像一个进程。

标签: docker nginx uwsgi


【解决方案1】:

你误解了RUN指令

RUN 指令将在新层之上执行任何命令 当前图像并提交结果

是用来构建你的镜像的,不是docker run在容器中执行命令的。

解决方案涉及使用 shell 脚本在 CMD 或 ENTRYPOINT 中执行这两行。 uwsgi 也必须被守护。查看这张图片https://github.com/tiangolo/uwsgi-nginx-docker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2016-10-13
    • 1970-01-01
    • 2012-06-16
    • 2017-08-07
    • 2022-09-25
    相关资源
    最近更新 更多