如何解决无法创建/etc/nginx/nginx.conf:目录不存在且启动容器导致“ exec:\” supervisord \”:在$ PATH中找不到可执行文件”
我正在构建docker映像以使用uwsgi / nginx部署flask应用程序。
此处是用于为同一容器创建docker容器的相关文件
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行出现以下错误
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
文件在我的虚拟机中是否存在。
我正在从看来有效的Tutorial - Deploy flask app with uwsgi/nginx using docker寻求帮助。但就我而言,它给了那个错误。
按照注释指示操作后,我可以成功构建docker映像。现在,我在下面收到此错误。
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.
有人可以在这里帮助我吗?预先感谢。
PS:我对这些事情很陌生。任何潜在客户都表示高度赞赏。
解决方法
由于几乎不可能管理带有注释的答案,因此,我将在此处发布supervisor_app.conf
文件的外观:
[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中。添加方法如下:
apt-get install -y supervisor
您可以在以下步骤之一中仅添加软件包名称:
RUN apt-get install -y ca-certificates supervisor
请注意,您已经有了该行,只是没有supervisor
。
EDIT2:根据@thsutton的回答,您还需要添加nginx
软件包,就像对supervisor
所做的那样。
python:3.6
图像是否已经包含nginx
和supervisord
?如果不是,则由您决定安装它们(使用apt-get
或类似的命令,视情况而定)。
nginx配置文件不存在且二进制文件不存在的事实向我暗示,可能是 not 安装的软件包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。