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目录。所以我不确定我在这里错过了什么。

+0

不要发明weel - 使用官方码头图片 - https://hub.docker.com/r/openresty/openresty/ –

你的问题是一个棘手的问题,但我想我想通了。

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

此外,他们提供了有关如何运行它有一个好的文档。

希望它有帮助!

+0

感谢您建议关闭恶魔。我接受了你的答案。 – GAK