testcontainers / testcontainers/testcontainers-python
MongoDbContainer on Windows 10 fails with getaddrinfo error
オープン
まだ誰も着手していません。
👀 requires attention
📦 package: mongodb
🪟 windows
- 主要言語
- Python
- スター
- 2.3k
- フォーク
- 386
- 平均マージ
- 4時間 40分
- マージ済み PR(30日)
- 1
説明
The following code fails with testcontainers-python 3.0.2:
from testcontainers.mongodb import MongoDbContainer
with MongoDbContainer('mongo:4.2.2') as mongo_:
... db = mongo_.get_connection_client().test
... db.test.insert_one({'foo': 'bar'})
with
Pulling image mongo:4.2.2
Container started: d5ca66c443
Traceback (most recent call last):
File "<input>", line 3, in <module>
File "C:\...\venv\lib\site-packages\pymongo\collection.py", line 695, in insert_one
self._insert(document,
File "C:\...\venv\lib\site-packages\pymongo\collection.py", line 610, in _insert
return self._insert_one(
File "C:\...\venv\lib\site-packages\pymongo\collection.py", line 599, in _insert_one
self.__database.client._retryable_write(
File "C:\...\venv\lib\site-packages\pymongo\mongo_client.py", line 1490, in _retryable_write
with self._tmp_session(session) as s:
File "C:\Program Files\Python38\lib\contextlib.py", line 113, in __enter__
return next(self.gen)
File "C:\...\venv\lib\site-packages\pymongo\mongo_client.py", line 1823, in _tmp_session
s = self._ensure_session(session)
File "C:\...\venv\lib\site-packages\pymongo\mongo_client.py", line 1810, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "C:\...\venv\lib\site-packages\pymongo\mongo_client.py", line 1763, in __start_session
server_session = self._get_server_session()
File "C:\...\venv\lib\site-packages\pymongo\mongo_client.py", line 1796, in _get_server_session
return self._topology.get_server_session()
File "C:\...\venv\lib\site-packages\pymongo\topology.py", line 482, in get_server_session
self._select_servers_loop(
File "C:\...\venv\lib\site-packages\pymongo\topology.py", line 208, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: localnpipe:32775: [Errno 11001] getaddrinfo failed
Interestingly, the MongoDbContainer.get_connection_url() method returns a URL with hostname localnpipe, which I suspect the mongo client does not understand. Using pymongo directly, I can connect to the created container using a hostname of localhost.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
MongoDbContainer.get_connection_url() から開始し、Windows 10 で示されている MongoDbContainer の例を再現して、localhost を使用する直接の PyMongo 接続と比較します。完了条件は、返される接続 URL が PyMongo の受け付けるホスト名を使用し、getaddrinfo エラーなしで insert が成功することです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- docker, mongodb, python
- 領域
- databases, testing
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100