【发布时间】:2015-02-11 12:41:06
【问题描述】:
我正在使用 Docker 构建一个多容器应用程序。 full environment is on 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;"]
添加到启用站点的 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 从应用程序容器中获取正确的结果,所以我很确定问题出在我的 nginx 设置而不是我的 Docker 设置中,但我无法解决这个问题出去。过去有其他人解决过这个问题吗?
【问题讨论】:
-
listen 80, 443;是语法错误。$API_PORT_8000_TCP_ADDR定义在哪里? -
@AlexeyTen 是的,我在调试时将其更改为
listen 80;,将相应地编辑问题。 Fig/Docker 在连接容器时会自动填充这些环境变量。 -
嗯,nginx 不会在配置中使用这些变量,所以你的配置实际上是指空变量。你可以找到有用的这个问题serverfault.com/q/577370/211028
-
@AlexeyTen 谢谢,看起来很有希望。我应该想到服务器故障,但我认为 Docker 有点模糊了这些区别。如果我得到一个解决方案,我会在这里发布。