docker 通过Python连接到MongoDB

y3bcpkx1  于 2023-08-03  发布在  Docker
关注(0)|答案(2)|浏览(121)

我在docker容器中创建了一个mongodb示例,我正在努力获得一个连接来更改数据库中的任何内容。有没有人有一个提示,什么可能是错的?
下面是docker run命令:

# Start the docker container
echo "mongodb password in file" $(pwd)/mongodb.pass
docker run \
    -p 27017:27017 \
    --restart unless-stopped \
    --name mongodb \
    -v airlist:/data/db \
    -v $(pwd)/mongodb.pass:/mongodb.pass \
    -d \
    --network airfetch \
    -e MONGO_INITDB_ROOT_USERNAME=airfetch \
    -e MONGO_INITDB_ROOT_PASSWORD=airlist27101978 \
    mongo:latest

字符串
使用这个docker容器,我想访问数据库。我在docker容器的主机上运行这个python脚本。由于端口是公开的,因此这应该可以工作。实际上,当我只传递auth_string=mongodb://localhost:27017时,我会从server_info方法得到一个响应,但不能插入任何记录或数据库。

import pymongo
import urllib.parse

username = urllib.parse.quote_plus('airfetch')
password = urllib.parse.quote_plus('airlist27101978')
auth_db = 'admin'
auth_source='?authSource=admin&retryWrites=true&w=majority'
auth_string = f"mongodb://{username}:{password}@localhost:27017/{auth_db}{auth_source}"
myclient = pymongo.MongoClient(auth_string)


但是,我得到错误消息:

pymongo.errors.OperationFailure: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}

jdgnovmf

jdgnovmf1#

您需要添加authsource:
?authSource=admin&retryWrites=true&w=majority:
出发地:

auth_string = f"mongodb://{username}:{password}@localhost:27017/{auth_db}"

字符串
收件人:

auth_string = f"mongodb://{username}:{password}@localhost:27017/{auth_db}?authSource=admin&retryWrites=true&w=majority"

ghg1uchk

ghg1uchk2#

我发现了问题:我更改密码后没有删除卷。显然,凭证存储在容器中的data/db中。

相关问题