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上,但是我无法解决这个问题。有没有人在过去解决过这个问题?
'听80,443;'是语法错误。 $ API_PORT_8000_TCP_ADDR定义在哪里? – 2015-02-11 13:01:27
@AlexeyTen是的,我已经改变了只是'听80;'当我在调试时,会相应地编辑问题。图/ Docker在链接容器时自动填充这些环境变量。 – 2015-02-11 13:06:26
那么,nginx不会在配置中使用这些变量,所以你的配置实际上是指空变量。你可以找到可用的这个问题http://serverfault.com/q/577370/211028 – 2015-02-11 13:12:05