无法创建/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"
问题描述
我正在构建docker映像以使用uwsgi / nginx部署flask应用程序。
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-中构建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
文件否。
我正在从此教程-使用docker 使用uwsgi / nginx部署flask应用程序,这似乎可以正常工作。
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 image。现在,我在下面收到此错误。
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.
推荐答案
由于几乎不可能管理带有注释的答案,因此我将发布<$ c的前景$ c> 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
我认为这是您所需要的。
I think it's what you need.
编辑:我刚刚看到有关主管未找到的评论。似乎您尚未将其安装在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
.
EDIT2:根据@thsutton的回答,您还需要添加 nginx
软件包,就像您对主管
所做的一样。
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屋!