无法创建/etc/nginx/nginx.conf:目录不存在和启动容器导致“exec:"supervisord“:$PATH 中找不到可执行文件" [英] cannot create /etc/nginx/nginx.conf: Directory nonexistent and starting container caused "exec: "supervisord": executable file not found in $PATH"

查看:128
本文介绍了无法创建/etc/nginx/nginx.conf:目录不存在和启动容器导致“exec:"supervisord“:$PATH 中找不到可执行文件"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建 docker 映像以使用 uwsgi/nginx 部署烧瓶应用程序.

I am building docker image to deploy flask app with uwsgi/nginx.

这里是为相同的创建 docker 容器的相关文件

Here are relevant file for to create a docker container for same

Dockerfile 内容

FROM python:3.6

MAINTAINER Dockerfiles

RUN mkdir /trell-ds-framework
WORKDIR /trell-ds-framework
ADD . /trell-ds-framework/
RUN python 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 -y install cron
RUN pip3 --no-cache-dir install -r requirements.txt
RUN python -c "import nltk;nltk.download('stopwords')"
# setup all the configfiles
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
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"]

supervisor_app.conf 内容

[supervisord]
nodaemon=true

[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
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

nginx_app.conf 内容

server {
    listen 80 default_server;
    server_name ip_address;

    # 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文件内容

[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

当我尝试在 trell-ds-framework 目录中构建 docker 映像时(使用命令 docker build -t ds_backend . ,我在 Dockerfile 的第 13/17 行收到以下错误

when I am trying to build the docker image in trell-ds-framework directory (using command docker build -t ds_backend . , I am getting following error on line 13/17 of Dockerfile

Step 13/17 : RUN echo "daemon off;" >> /etc/nginx/nginx.conf
 ---> Running in 1ee5628a4bc2
/bin/sh: 1: cannot create /etc/nginx/nginx.conf: Directory nonexistent
The command '/bin/sh -c echo "daemon off;" >> /etc/nginx/nginx.conf' returned a non-zero code: 2

我检查了这个 /etc/nginx/nginx.conf 文件是否存在于我的虚拟机中.

I checked this /etc/nginx/nginx.conf file exists in my virtual machine.

我正在从这个 教程 - 部署中获得帮助使用 docker 的带有 uwsgi/nginx 的烧瓶应用程序似乎正在工作.但就我而言,它给出了那个错误.

I am taking help from this Tutorial - Deploy flask app with uwsgi/nginx using docker which seems to be working. But in my case its giving that error.

按照评论说明,我可以成功构建 docker 映像.现在我在下面收到此错误.

After following comments instruction I could build docker image successfully. Now I am getting this error below.

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "supervisord": executable file not found in $PATH": unknown.

谁能帮帮我.提前致谢.

Can anybody help me out here. Thanks in advance.

PS:我对这些东西很陌生.任何线索都非常感谢.

PS: I am very new to these things. Any leads highly appreciated.

推荐答案

由于几乎不可能使用评论管理答案,我将在此处发布 supervisor_app.conf 文件的前景:

Since managing answers with comments is nearly impossible, I'll post the outlook of the supervisor_app.conf file here:

[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

我认为这是你需要的.

我刚刚看到关于未找到主管的评论.看来你还没有在 Dockerfile 中安装它.添加方法如下:

I just saw the comment about supervisor not being found. It seems that you haven't installed it in Dockerfile. Here's how to add it:

apt-get install -y supervisor

您可以在其中一个步骤中仅添加包名称,如下所示:

You can add just the package name in one of the steps, like this:

RUN apt-get install -y ca-certificates supervisor

请注意,您已经有了该行,只是没有 supervisor.

Note that you already have that line, just without supervisor.

根据@thsutton 的回答,您还需要添加 nginx 包,就像 supervisor 一样.

As per @thsutton's answer, you also need to add nginx package, the same way you did for supervisor.

这篇关于无法创建/etc/nginx/nginx.conf:目录不存在和启动容器导致“exec:"supervisord“:$PATH 中找不到可执行文件"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆