web-dev-qa-db-ja.com

docker-compose再起動接続プールがいっぱいです

私のチームと私はdocker-composeを使用してインフラストラクチャの一部をdockerに変換しています。すべてがうまく機能しているように見えますが、唯一の問題は再起動を行うことです。これにより、接続プールが完全にエラーになります。私はこれを引き起こしているものを理解しようとしています。 2つのコンテナーまたは(1つの完全なセットアップ)を削除すると、正常に動作します。

私がやろうとしていることの背景。これはRuby on Railsアプリケーションであり、組織内の異なるチームに対して複数の異なる設定で実行されています。サーバーは合計14の異なるコンテナを実行しています。ホストサーバーのOSはCentOSで、composeコマンドは同じネットワーク上のMacBook Proから実行されています。boot2dockerVMでも同じ結果が得られました。

コマンドからの詳細な出力は次のとおりです(boot2docker vmを使用) https://Gist.github.com/rebelweb/5e6dfe34ec3e8dbb8f02c0755991ef11

どんなヘルプやポインタでもありがたいです。

8
Ryan Condron

このエラーメッセージ、およびdocker-composeを介して実行される10個を超えるコンテナーを使用する開発環境にも苦労しています。

WARNING: Connection pool is full, discarding connection: localhost

この問題の根本的な原因を発見したと思います。 pythonライブラリrequestsは、dockerライブラリがDocker APIおよびおそらくコンテナ自体と通信するために使用するHTTP接続のプールを維持します。 10個を超えるコンテナーでdocker-composeを使用する人だけがこれを目にするという仮説。問題は2つあります。

  • requestsは、デフォルトで接続プールのサイズを10に設定し、
  • docker-composeまたはdockerライブラリからより大きなプールサイズを挿入する方法はないようです

私は解決策をまとめました。 requestsの私のライブラリは~/.local/lib/python2.7/site-packagesにありました。 requests/adapters.pyを見つけ、DEFAULT_POOLSIZEを10から1000に変更しました。

これは本番ソリューションではなく、あいまいであり、パッケージのアップグレード後も存続しません。

10
Squirrelsama

デプロイ前にネットワークプールをリセットしてみてください

$ docker network Prune

ここにドック: https://docs.docker.com/engine/reference/commandline/network_Prune/

1
andriy-baran