我的团队正在使用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配置文件。
有没有人能够深入了解导致此问题的原因?或者甚至更好,一个解决方案?寻找想法。谢谢!
答案 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项目
希望这有帮助