[转帖自堆栈溢出因为我认为服务器配置可能是问题所在]
我正在使用 Docker 构建一个多容器应用程序。完整环境在 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;
}
}
那里的 nginx 配置看起来与这个答案我觉得这个方法应该没问题。但是当我在生产环境中访问我的机器或域上的 localhost(无端口)时,我只会看到 nginx 欢迎页面,没有进行任何转发。
我可以连接到正在运行的 nginx 容器,并使用 wget 从应用程序容器中获取正确的结果,http://api_1:8000
因此我很确定问题出在我的 nginx 设置中,而不是我的 Docker 设置中,但我无法解决这个问题。以前有其他人解决过这个问题吗?
答案1
终于搞清楚了。我需要删除使用 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;"]
世间万物皆安好。