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

Rya*_*ron 7 ruby ruby-on-rails docker docker-compose

我和我的团队正在使用docker-compose将我们的一些基础架构转换为docker。一切似乎都很好,我唯一的问题是重新启动,这给了我一个连接池已满的错误。我试图弄清楚是什么原因造成的。如果我删除2个容器或(1个完整的安装程序),它将正常工作。

关于我正在尝试做的一点背景。这是一个Ruby on Rails应用程序,正在为组织内的不同团队使用多种不同的配置来运行。服务器总共运行14个不同的容器。主机服务器操作系统为CentOS,正在从同一网络上的MacBook Pro运行compose命令。我也用boot2docker虚拟机尝试了同样的结果。

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

任何帮助或指针表示赞赏。

Squ*_*ama 9

我一直在使用此错误消息以及在使用十个以上通过执行的容器的开发环境中苦苦挣扎docker-compose。

WARNING: Connection pool is full, discarding connection: localhost
Run Code Online (Sandbox Code Playgroud)

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

  • requests 默认将其连接池大小设置为10,并且
  • 似乎没有任何方法可以从docker-compose或docker库中注入更大的池大小

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

这不是生产解决方案,相当模糊,并且无法在软件包升级中幸免。


小智 2

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

$ docker network prune
Run Code Online (Sandbox Code Playgroud)

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