在docker restart policy = always之后,Nginx无法正常工作

时间:2017-05-19 17:46:14

标签: django nginx docker-compose

我的团队正在使用Docker Compose来提供Django Web应用程序。我们有一个容器通过Gunicorn Web服务器为Django提供服务,另一个容器是使用Nginx的第一个容器的反向http代理(它还提供静态文件)。

我们正在尝试实施docker的“始终”重启策略。这是问题所在:

在重新启动后(或在将docker引擎关闭并重新启动之后),当我们在浏览器中访问我们的网页时,我们看到“ERR_EMPTY_RESPONSE localhost没有发送任何数据”错误。快速的“docker-compose ps”表明尽管没有按预期工作,但两个容器都在运行。但是当我们做“docker-compose restart”时,那么一切都按预期工作。

我一直在检查我们的设置尝试本地化问题,而我所知道的是,在Docker自动重启后,它是Nginx容器的问题。我将主机上的端口映射到我们的Gunicorn容器,我可以访问Gunicorn容器,并且该容器在自动重启后按预期工作。因此,通过消除过程,它必须是Nginx容器的问题。

Here是我们的docker-compose.yml文件。

Here是Gunicorn Dockerfile。

Here是我们的Nginx配置文件。

有没有人能够深入了解导致此问题的原因?或者甚至更好,一个解决方案?寻找想法。谢谢!

2 个答案:

答案 0 :(得分:1)

github上的问题准确描述了您的问题:https://github.com/docker/compose/issues/872

  

此链接表示docker引擎1.4存在问题。这是   在以后的版本中修复。

答案 1 :(得分:0)

我的服务前面有一个Nginx代理,重启后所有其他服务都重启,但nginx-proxy没有重启。我正在使用docker-compose文件。要解决此问题,我在systemd中创建了一个名为nginx-proxy-container.service的{​​{1}}服务文件,如下所示

/etc/systemd/system

然后我重新加载了deamon配置并启动它,如下所示

Description=NGinx Proxy App
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=-/usr/local/bin/docker-compose -f /path/to/docker-compose.yml down
ExecStart=/usr/local/bin/docker-compose -f /path/to/docker-compose.yml up -d

[Install]
WantedBy=multi-user.target

如果您正在寻找纯粹的Docker解决方案,请查看docker-systemd项目

希望这有帮助