2015-02-11 156 views
0

我正在用Docker構建一個多容器應用程序。 full environment is on github您應該重新創建它,但爲了方便起見,我在下面列出了我認爲是相關部分的內容。我nginx的Dockerfile是像這樣:使用dockerized nginx的反向代理

FROM ubuntu:14.04 
MAINTAINER Garry Cairns 
ENV REFRESHED_AT 2015-02-11 

# get the nginx package and set it up 
RUN ["apt-get", "update"] 
RUN ["apt-get", "-y", "install", "nginx"] 

# forward request and error logs to docker log collector 
RUN ln -sf /dev/stdout /var/log/nginx/access.log 
RUN ln -sf /dev/stderr /var/log/nginx/error.log 
VOLUME ["/var/cache/nginx"] 
EXPOSE 80 443 

# load nginx conf 
ADD ./site.conf /etc/nginx/sites-available/correspondence 
RUN ["ln", "-s", "/etc/nginx/sites-available/correspondence", "/etc/nginx/sites-enabled/correspondence"] 

CMD ["nginx", "-g", "daemon off;"] 

以及添加的site.conf文件啓用網站,看起來像這樣:

# see http://serverfault.com/questions/577370/how-can-i-use-environment-variables-in-nginx-conf#comment730384_577370 
upstream api { 
    server api_1:8000; 
} 

server { 
    location/{ 
     proxy_pass  http://api; 
    } 
} 

nginx的配置似乎在this answer發現非常相似,以至於我覺得這個方法應該沒問題。但是,當我在我的機器上訪問本地主機(無端口)或在生產環境中訪問域時,我只能訪問nginx歡迎頁面,不會進行轉發。

我可以連接到正在運行的nginx容器,並從應用程序容器使用http://api_1:8000 wget正確的結果,所以我很確定問題出在我的nginx安裝程序而不是我的Docker上,但是我無法解決這個問題。有沒有人在過去解決過這個問題?

+0

'聽80,443;'是語法錯誤。 $ API_PORT_8000_TCP_ADDR定義在哪裏? – 2015-02-11 13:01:27

+0

@AlexeyTen是的,我已經改變了只是'聽80;'當我在調試時,會相應地編輯問題。圖/ Docker在鏈接容器時自動填充這些環境變量。 – 2015-02-11 13:06:26

+0

那麼,nginx不會在配置中使用這些變量,所以你的配置實際上是指空變量。你可以找到可用的這個問題http://serverfault.com/q/577370/211028 – 2015-02-11 13:12:05

回答

2

終於明白了這一點。我需要刪除使用nginx安裝的默認啓用站點。我現在Dockerfile讀取:

FROM ubuntu:14.04 
MAINTAINER Garry Cairns 
ENV REFRESHED_AT 2015-02-11 

# get the nginx package and set it up 
RUN ["apt-get", "update"] 
RUN ["apt-get", "-y", "install", "nginx"] 

# forward request and error logs to docker log collector 
RUN ln -sf /dev/stdout /var/log/nginx/access.log 
RUN ln -sf /dev/stderr /var/log/nginx/error.log 
VOLUME ["/var/cache/nginx"] 
EXPOSE 80 443 

# load nginx conf 
ADD ./site.conf /etc/nginx/sites-available/correspondence 
RUN ["ln", "-s", "/etc/nginx/sites-available/correspondence", "/etc/nginx/sites-enabled/correspondence"] 
RUN ["rm", "-rf", "/etc/nginx/sites-available/default"] 
CMD ["nginx", "-g", "daemon off;"] 

,一切都很好世界。