Docker代理与自定义网络

时间:2017-06-13 22:00:45

标签: nginx docker reverse-proxy

我正在设置一个Docker服务器,它必须托管多个需要通过http(80)访问的容器。我已经遵循了这个tutorial,这个例子适用于简单的情况。使用的代理映像是jwilder/nginx-proxy,可以在设置或拆除容器时自动创建Nginx配置。

问题是将在Docker服务器上运行的所有项目都使用破坏代理的自定义网络。

工作情况

当代理 Web服务器在默认的bridge网络上运行时,教程方式有效。然后代理完成他的工作并将流量重定向到正确的容器。 working situation

NOT工作情况

大多数项目都是Laravel应用程序,由Web服务器,PHP FPM和数据库组成。容器之间的通信是通过两个网络进行的;服务器和数据库。

此设置不适用于桥接网络上的代理容器。所以我在Docker服务器上创建了一个名为 proxy (bridge)的新网络,并在其中放置了代理和项目的nginx容器。代理服务器现在成功更改为配置以包含项目(IP地址:端口)。但是当我尝试访问域时,我得到了默认的Nginx欢迎页面。项目容器关闭时页面仍然有效。代理容器停止时页面停止工作。 当我使用容器端口访问域时,项目工作正常。 not working situation

TL; DR;

当两个容器(代理+应用程序)都在桥接网络上时,代理工作正常。当容器位于自定义网络中时,代理会提供默认的Nginx欢迎页面(请参阅图像)。

如何让代理工作?

我尝试了什么?

  • 从代理到项目成功
  • 在代理上使用curl进行投影以检查网页是否正常工作成功
  • 检查代理的Nginx配置文件是否缺少详细信息。 项目容器的IP地址加端口号是正确的。文件条目与示例的情况相同。

1 个答案:

答案 0 :(得分:0)

我通过反复试验找到了问题。我监督了Nginx日志中的错误:

2017/06/14 14:40:27 Error running notify command: nginx -s reload, exit status 1

所以我调查了Nginx配置,发现其中有一个my-default-domain.com条目,上游部分没有内容。这导致代理跳过reload config命令,从而显示默认配置的“Welcome!”页。

问题是我在代理容器的DEFAULTHOST: my-default-domain.com中设置了环境变量docker-compose。因此,代理容器搜索了设置了环境变量VIRTUAL_HOST=my-default-domain.com的容器,但无法找到它导致空的上游部分。

我将默认容器放入proxy网络并立即工作(或者只删除默认的主机环境变量)。