nginx docker文件无法打开文件
我正在写一个创建docker文件来在容器中运行openresty nginx。nginx docker文件无法打开文件
我的码头文件在下面。
FROM ubuntu:latest
ENV PATH="/usr/local/openresty/nginx/sbin:${PATH}"
LABEL info="running open resty on docker container"
RUN apt-get update -y \
&& apt-get install -y wget \
&& wget -qO - https://openresty.org/package/pubkey.gpg | apt-key add - \
&& apt-get -y install software-properties-common \
&& add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" \
&& apt-get update -y \
&& apt-get install -y openresty
RUN mkdir -p /opt/poc
RUN cd /opt/poc \
&& mkdir logs \
&& touch logs/error.log \
&& mkdir conf \
&& cd ../
RUN chmod -R 755 /opt/poc
WORKDIR /opt/poc
ADD ./conf/nginx.conf conf/
EXPOSE 8383
CMD ["nginx", "-p /opt/poc","-c conf/nginx.conf"]
该图像构建没有问题。但是当我运行docker时,我收到了下面的错误消息。
nginx的:[警告]无法打开错误日志文件:打开() “ /opt/poc/logs/error.log” 失败(2:没有这样的文件或目录) 2017年9月23日3点35分44秒[EMERG] 1#1:打开() “的/ opt/POC/conf目录/ nginx.conf” 失败(2:没有这样的文件或目录)的
,而是如果我跑CMD ["nginx", "-p /opt/poc","-c conf/nginx.conf"]
更改为CMD $ls
docker正在列出conf和logs目录。所以我不确定我在这里错过了什么。
你的问题是一个棘手的问题,但我想我想通了。
TL; DR
使用此CMD
(它在-p
和-c
标志没有空格)
CMD ["nginx", "-g", "daemon off;", "-p", "/opt/poc", "-c", "conf/nginx.conf"]
的
-g daemon off;
标志带来的nginx作为前进的过程。否则,如果它作为守护进程运行,那么在nginx启动后你的容器就会死掉。
长的答案
当您添加一个字符串间隔到任何CMD
命令时出现问题。在你的情况下,-p /opt/poc
,-c conf/nginx.conf
。
我相信(并且我需要在docs/Docker源代码中进行更多确认)CMD
忽略了您放入CMD
零件中的两个“单词”中的一个。所以
CMD ["executable","param1","param2"]
,你的情况,你的params
正在做“多”并非只是一个参数(“多”是当你:
由于文件说,推荐的方法是做这样的在那里使用空间)。因此,删除空格并将命令拆分为文档说明解决问题的方式。
提示
我不知道什么是你的使用情况,但是如果可以的话,尽量使用由社区提供的图像。在这个例子中,openresty
业主保持图像:
https://hub.docker.com/r/openresty/openresty
此外,他们提供了有关如何运行它有一个好的文档。
希望它有帮助!
感谢您建议关闭恶魔。我接受了你的答案。 – GAK
不要发明weel - 使用官方码头图片 - https://hub.docker.com/r/openresty/openresty/ –