nginx的docker文件无法打开文件
我正在写一个创builddocker文件来在容器中运行openresty 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:[alert]无法打开错误日志文件:open()“/opt/poc/logs/error.log”failed(2:No such file or directory)2017/09/23 03: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
命令添加一个间隔string时,就会出现问题。 你的情况, -p /opt/poc
, -c conf/nginx.conf
。
我相信(我将需要更多的文档/ Docker源代码来确认), CMD
忽略了放在你的CMD
部分中的两个“单词”中的一个。
正如文档所述,推荐的方法是这样做的:
CMD ["executable","param1","param2"]
所以,就你而言,你的params
比做params
做得“更多”(当你在那里使用一个空间时,“更多”是)。 所以,删除间隔和分裂的命令是在文件说,解决问题的方式。
小费
我不知道你的用例是什么,但是如果可以的话,尝试使用社区提供的图片。 在这个例子中, openresty
的所有者维护图像:
https://hub.docker.com/r/openresty/openresty
另外,他们提供了一个关于如何运行它的好文档。
希望能帮助到你!