したかったこと
Docker上でMongoDBを立ち上げて、ホストマシン上のMongoDB compassからアクセスしたかった。
症状
mongodb://localhost:27017/
にcompassから接続を試みたが、
getaddrinfo ENOTFOUND mongo
というエラーが発生して接続できない。
一方で、mongoshを使ってターミナルからアクセスするとアクセス可能であった
% mongosh "mongodb://localhost:27017"
Current Mongosh Log ID: 66f8d4b7c208d9e36d035dda
Connecting to: mongodb://localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.3.1
Using MongoDB: 6.0.17
Using Mongosh: 2.3.1
hogehoge [direct: primary] test>
解決
Advanced Connection OptionsのDirect Connectionにチェックを入れるだけで解決した(チェックを入れると、URIに?directConnection=true
が追加される)。
よく見たらmongoshでの接続ではこの設定が有効になっているので接続できたのだと思われる。
おわりに
インターネット上で情報を探しても、特に細かい設定無しで簡単に接続できる!という記事ばかりで接続できない場合に関する情報が少なく、解決に非常に時間がかかってしまった。特にmongoshからは接続できるのが謎で、探しても見つからない症状だったが、偶然この方法に言及している方がいて助かった。
ただ、今になって思えばmongoshのConnecting to:
以下を真似ればすぐに解決したのだった。
一方で、なぜ今回このオプションが必要となったのかは不明で、かつこの設定によって具体的に何が変わって解決したかも不明なので、有識者の方教えてください。
参考リンク
https://stackoverflow.com/questions/73836909/getting-getaddrinfo-enotfound-mongo-when-trying-to-connect-to-mongodb
https://github.com/mongodb/mongodb-kubernetes-operator/issues/946