私のチームと私はdocker-composeを使用してインフラストラクチャの一部をdockerに変換しています。すべてがうまく機能しているように見えますが、唯一の問題は再起動を行うことです。これにより、接続プールが完全にエラーになります。私はこれを引き起こしているものを理解しようとしています。 2つのコンテナーまたは(1つの完全なセットアップ)を削除すると、正常に動作します。
私がやろうとしていることの背景。これはRuby on Railsアプリケーションであり、組織内の異なるチームに対して複数の異なる設定で実行されています。サーバーは合計14の異なるコンテナを実行しています。ホストサーバーのOSはCentOSで、composeコマンドは同じネットワーク上のMacBook Proから実行されています。boot2dockerVMでも同じ結果が得られました。
コマンドからの詳細な出力は次のとおりです(boot2docker vmを使用) https://Gist.github.com/rebelweb/5e6dfe34ec3e8dbb8f02c0755991ef11
どんなヘルプやポインタでもありがたいです。
このエラーメッセージ、および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に変更しました。
これは本番ソリューションではなく、あいまいであり、パッケージのアップグレード後も存続しません。
デプロイ前にネットワークプールをリセットしてみてください
$ docker network Prune
ここにドック: https://docs.docker.com/engine/reference/commandline/network_Prune/