反向代理与dockerized nginx

我正在用Docker构build一个多容器应用程序。 如果您希望重新创build完整的环境,请参阅github ,但为了方便起见,我在下面列出了相关的部分。 我的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"] CMD ["nginx", "-g", "daemon off;"] 

而被添加到sites-enabled的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; } } 

那里的nginxconfiguration看起来与在这个答案中发现的相似,我觉得这个方法应该没问题。 但是,当我在我的机器上访问本地主机(无端口)或生产中的我的域时,我只是得到nginx的欢迎页面,没有转发正在进行。

我可以连接到正在运行的nginx容器,并使用http://api_1:8000从应用程序容器中获取正确的结果,所以我很确定问题出在我的nginx设置中,而不是我的Docker中,但是我不能对此进行http://api_1:8000一出。 有没有人在过去解决过这个问题?

终于明白了这一点。 我需要删除使用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;"] 

世界上一切都好。