여러 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 {}  

모든 일이 잘 진행되고 있는 것 같지만,때때로파일 중 하나가 다음과 같이 실패합니다.

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에 문제가 있다는 징후는 없습니다.

관련 정보