複数のDockerコンテナを並列に実行すると、ネットワークエラーが発生します。

複数のDockerコンテナを並列に実行すると、ネットワークエラーが発生します。

ユニットテストを含むディレクトリに複数のPythonファイルがあり、コードを編集/code/testせずにテスト実行を並列化するために、GNU Parallelを使用してNデータベースに対してファイルを一度実行できると思いました。Nまずデータベースを起動します。

$ docker run -d --name redis-unittest-1 redis \
 && docker run -d --name mongo-unittest-1 mongo:3.2.10 \
 && docker run -d --name redis-unittest-2 redis \
 && docker run -d --name mongo-unittest-2 mongo:3.2.10 \
 && docker run -d --name redis-unittest-3 redis \
 && docker run -d --name mongo-unittest-3 mongo:3.2.10 \
 && docker run -d --name redis-unittest-4 redis \
 && docker run -d --name mongo-unittest-4 mongo:3.2.10 \
 && docker run -d --name redis-unittest-5 redis \
 && docker run -d --name mongo-unittest-5 mongo:3.2.10 \
 && docker run -d --name redis-unittest-6 redis \
 && docker run -d --name mongo-unittest-6 mongo:3.2.10 \
 && docker run -d --name redis-unittest-7 redis \
 && docker run -d --name mongo-unittest-7 mongo:3.2.10 \
 && docker run -d --name redis-unittest-8 redis \
 && docker run -d --name mongo-unittest-8 mongo:3.2.10

findその後、すべてのテストファイル名を取得してParallelにパイプするために使用します。

docker run test_img find /code/test -name "test*.py" \
| parallel -j8 \
docker run --rm \
--link mongo-unittest-{%}:db --link redis-unittest-{%}:redis \
-v $(pwd)/test-reports:/code/test-reports \
test_img python /code/test/discover.py --file {}  

すべてがうまく進んでいるようですが、時々ファイルの1つが次のように失敗します。

Traceback (most recent call last):
  File "/code/test/server/testApplicationAPI.py", line 28, in setUp
    super(TestApplicationAPI, self).setUp()
  File "/code/test/server/tools/testutils.py", line 345, in setUp
    self.app = server.createApp(True)
  File "/code/server/util/rq/../../server.py", line 55, in createApp
    mongo = PyMongo(app)
  File "/usr/local/lib/python2.7/site-packages/flask_pymongo/__init__.py", line 97, in __init__
    self.init_app(app, config_prefix)
  File "/usr/local/lib/python2.7/site-packages/flask_pymongo/__init__.py", line 249, in init_app
    cx = connection_cls(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py", line 428, in __init__
    raise ConnectionFailure(str(e))
ConnectionFailure: [Errno -2] Name or service not known

このトラブルシューティングをどのように開始するのかわかりません。おそらく、straceのようなものが何が起こっているのかをもっと詳しく見ることができますか?しかし、実際に使ったことはありません。どんなアイデアでも大いに感謝します。

答え1

MongoDBで競合状態エラーが発生したようです。メッセージを見ると、DNSに過負荷がかかるように見えますが、他のものかもしれません。

これで、次のことを行う必要があります。

  • MongoDBの最新コードでバグを再現できることを確認してください(バグが既知で修正されている可能性があります)。
  • MCVEを作成できることを確認してくださいhttps://stackoverflow.com/help/mcve。これは、エラーが競合状態の場合に非常に困難な場合がよくあります。特に、開発者が正確な状況を再現できるようにしたいからです。 OsBoxes.orgで仮想マシンにエラーが発生する可能性がある場合は、良いスタートです。仮想マシンの並列ジョブ数とコア数を変更することも役に立ちます。 Mongoコミュニティの助けを借りている人があなたを導くことができますか?
  • バグレポートを送信してください。

これまでGNU Parallelに問題があるという兆候はありません。

関連情報