2017-09-23 83 views
0

我正在寫一個創建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/ –

回答

2

你的問題是一個棘手的問題,但我想我想通了。

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