docker-compose重新启动连接池已满

时间:2018-04-03 20:32:15

标签: ruby-on-rails ruby docker docker-compose

我和我的团队正在使用docker-compose将我们的一些基础设施转换为docker。一切似乎工作得很好我唯一的问题是重启它给我一个连接池是完全错误。我试图找出造成这种情况的原因。如果我删除2个容器或(1个完整设置),它可以正常工作。

关于我想做什么的一点背景知识。这是一个Ruby on Rails应用程序,它针对组织内的不同团队运行多种不同的配置。服务器总共运行14个不同的容器。主机服务器操作系统是CentOS,compose命令是从同一网络上的MacBook Pro运行的。我也尝试使用具有相同结果的boot2docker VM。

以下是命令的详细输出(使用boot2docker vm) https://gist.github.com/rebelweb/5e6dfe34ec3e8dbb8f02c0755991ef11

感谢任何帮助或指示。

4 个答案:

答案 0 :(得分:3)

在使用通过docker-compose执行的十多个容器的开发环境中,我也一直在为这个错误消息而苦苦挣扎。

WARNING: Connection pool is full, discarding connection: localhost

我认为我已经找到了此问题的根本原因。 python库requests维护一个HTTP连接池,docker库用于与docker API以及容器本身进行对话。我的假设是,只有我们这些使用docker-compose并具有超过10个容器的人才会看到这种情况。问题是双重的。

  • requests将其连接池大小默认设置为10,并且
  • 似乎没有办法从docker-composedocker库中注入更大的池大小

我找到了一个解决方案。我的requests库位于~/.local/lib/python2.7/site-packages中。我找到了requests/adapters.py,并将DEFAULT_POOLSIZE从10更改为1000。

这不是生产解决方案,非常晦涩,无法在软件包升级中幸免。

答案 1 :(得分:0)

您可以在部署之前尝试重置网络池

$ docker network prune

在这里停靠:https://docs.docker.com/engine/reference/commandline/network_prune/

答案 2 :(得分:0)

我的Django应用程序遇到了同样的问题。在docker-compose中运行约70个容器。这篇文章引起了我的注意,因为设置COMPOSE_PARALLEL_LIMIT后似乎需要修剪

我做到了:

docker-compose down
export COMPOSE_PARALLEL_LIMIT=1000
docker network prune
docker-compose up -d

答案 3 :(得分:0)

供将来的读者使用。 @ andriy-baran的答案的一小部分内容 您需要停止所有容器,删除它们,然后它们运行network prune(因为prune命令仅删除未使用的网络)

是这样的:

docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
docker network prune