我在连接到 mongodb Atlas 时收到此错误:“dns.exception.Timeout:DNS 操作在 30.000985383987427 秒后超时”

Posted

技术标签:

【中文标题】我在连接到 mongodb Atlas 时收到此错误:“dns.exception.Timeout:DNS 操作在 30.000985383987427 秒后超时”【英文标题】:i am getting this error while connecting to mongodb Atlas: "dns.exception.Timeout: The DNS operation timed out after 30.000985383987427 seconds" 【发布时间】:2019-08-14 20:22:51 【问题描述】:

我正在使用 Flask-PyMongo 将我的 Flask 应用程序连接到 mongodb atlas,但出现此错误。

“dns.exception.Timeout:DNS操作在30.000985383987427秒后超时”

然后它说: 在处理上述异常的过程中,又出现了一个异常:

“pymongo.errors.ConfigurationError:DNS 操作在 30.000985383987427 秒后超时”

代码如下:

from flask import Flask 
from flask_pymongo import PyMongo

app = Flask(__name__)

app.config['MONGO_DBNAME'] = 'FirstCluster'
app.config['MONGO_URI'] = 'mongodb+srv://username:password@firstcluster-bblvc.mongodb.net/test?retryWrites=true'


mongo = PyMongo(app)

@app.route('/connect')
def connect_to_mongo():
    return 'Connecting to Mongodb'

@app.route('/collections')
def adding():
    user = mongo.db.users
    user.insert('name' : 'vatsalay')
    return 'Added User!'


if __name__ == '__main__':
    app.run(debug=True)

【问题讨论】:

DNS 超时可能是网络问题的结果。它可能是暂时的(只是一个传递的东西)或者您运行代码的机器需要配置检查是否允许 DNS 协议,或者 Atlas 实例没有运行。还请确保您将您的客户端应用程序主机地址添加到允许的 Atlas 客户端的白名单中,或类似地允许从该计算机访问。 你是对的,这只是一个过渡阶段。 我正在开发 Flask 应用程序,安装 eventlet 后我遇到了同样的问题。但是当我卸载它时,超时问题就消失了。希望这对某人有所帮助... 【参考方案1】:

尝试使用不同的连接字符串。我在使用 3.6 或更高版本的字符串时遇到问题。只需使用 3.4 或更高版本的字符串即可立即连接。

如果你坚持使用较新的连接字符串,则需要安装pymongo srv

对于 Windows

pip install pymongo[srv]

对于 Mac

pip3 install pymongo[srv]

在 zsh 上

pip3 install 'pymongo[srv]'

【讨论】:

你用的是哪个操作系统?? 它的坚果,这实际上是一个完美的解决方案【参考方案2】:

看来您必须安装 pymongo[srv] 才能使 mongodb+srv URI 工作。 尝试使用pip3 install 'pymongo[srv]'安装它

【讨论】:

【参考方案3】:

尝试使用不同版本的连接字符串。您可以更改集群中的版本 -> 连接 -> 连接您的应用程序。

【讨论】:

【参考方案4】:

这可能是您的 Mongo 客户端无法找到与服务器的连接时导致的错误。所以,最好检查你的互联网连接,然后运行程序

【讨论】:

【参考方案5】:

有同样的问题,它通过将我的 dns 从自动更改为“8.8.8.8”对我有用。 如何? 如果您使用的是 Windows,请执行以下操作

    打开网络和互联网设置 网络和共享中心 按下您的互联网连接 Wi-fi(路由器名称) 礼尚往来 选择tcp/ipv4再去礼节 选择这个并编辑它“使用以下 dns 服务器并选择”8.8.8.8 (google dns)

正如 Neil Lunn 所说,检查允许的 ips

【讨论】:

就我而言,这只是一个过渡阶段,正如@Neil Lunn 之前所说。因此,如果你们中的任何人遇到此问题,请等待一天,它将得到解决。如果它只是一个过渡阶段。【参考方案6】:

Google App Engine 标准中的同样问题。

在我的情况下是使用旧类型 URL 的解决方案:

client = pymongo.MongoClient("mongodb://USERNAME:PASSWORD@CLUSTER...

西南:

Ubuntu 18.04 Python 2.7.17 / 2.7.12 Pymongo 3.11.1 谷歌云 SDK 319.0.0

直接从 os 连接测试文件没问题,但从 Google SDK dev appserver2 运行相同的代码失败。

更改后由 cloud.mongodb.com Atlas 生成的 URL 在集群部分 -> 连接 -> 选择连接方法 -> Python - 3.4 或更高版本 连接已建立。

【讨论】:

【参考方案7】:

我使用的是 python 3.6.2,所以我选择使用“3.6 或更高版本”的连接字符串。它给了我这个错误。后来我用“3.4或更高版本”的连接字符串尝试了它。效果很好。

尝试使用“3.4 或更高版本”的连接字符串。

【讨论】:

【参考方案8】:

我遇到了类似的问题。突然连不上。我所有的同事都在使用相同的 python 版本等。

几天前,另一位同事在使用手机 wifi 时超时。当他们切换到正常的 wifi 时,他们可以连接。

重新启动 wifi 后,我就可以连接了。

这不是一个很好的解决方案,但值得一试。

【讨论】:

以上是关于我在连接到 mongodb Atlas 时收到此错误:“dns.exception.Timeout:DNS 操作在 30.000985383987427 秒后超时”的主要内容,如果未能解决你的问题,请参考以下文章

连接到 MongoDB Atlas Cluster 错误

尝试将 Heroku 连接到 Atlas MongoDB 时出现问题

MongoError:在 mongoDB atlas 中首次连接时无法连接服务

MongoError:在 mongoDB atlas 中首次连接时无法连接服务

无法使用 Mongoose 连接到 MongoDB Atlas

节点/快速应用程序无法使用mongoose连接到Mongodb Atlas