2015-02-11 111 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;"] 

,一切都很好世界。