[英]Failed Authentication when connecting with Flask through PyMongo to MongoDB in Docker Compose
我正在使用 Docker Compose 并尝试让两个容器相互通信。 一个运行 MongoDB 数据库,另一个运行 Flask 应用程序,需要使用 PyMongo 从第一个数据库读取数据。
Mongo 镜像定义如下 Dockerfile:
FROM mongo:6.0
ENV MONGO_INITDB_ROOT_USERNAME admin
ENV MONGO_INITDB_ROOT_PASSWORD admin-pwd
ENV MONGO_INITDB_DATABASE admin
COPY mongo-init.js /docker-entrypoint-initdb.d/
EXPOSE 27017
我的数据是通过以下 mongo-init.js 脚本加载的:
db.auth('admin','admin-pwd')
db = db.getSiblingDB('quiz-db')
db.createUser({
user: 'quiz-admin',
pwd: 'quiz-pwd',
roles: [
{
role: 'readWrite',
db: 'quiz-db'
}
]
});
db.createCollection('questions');
db.questions.insertMany([
{
question: "Do you like sushi?",
answers: {
0:"Yes",
1:"No",
2:"Maybe"
}
}
]);
Flask 应用程序非常简单。 对于这个问题,我将跳过 Dockerfile,因为我认为这对问题并不重要。 我尝试使用以下代码连接到数据库:
from flask import Flask, render_template
from pymongo import MongoClient
app = Flask(__name__)
MONGO_HOST = "questions-db"
MONGO_PORT = "27017"
MONGO_DB = "quiz-db"
MONGO_USER = "quiz-admin"
MONGO_PASS = "quiz-pwd"
uri = "mongodb://{}:{}@{}:{}/{}?authSource=quiz-db".format(MONGO_USER, MONGO_PASS, MONGO_HOST, MONGO_PORT, MONGO_DB)
client = MongoClient(uri)
db=client["quiz-db"]
questions=list(db["questions"].find())
我不是 Mongo 方面的专家,但我已将 authSource 设置为“quiz-db”,因为这是我在“mongo-init.js”脚本中创建用户的数据库。 我尝试单独运行数据库容器,并且我确实以用户“quiz-db”使用 mongosh 成功登录。 所有数据都在那里,一切正常。
只有在尝试从 Flask 应用程序连接时才会出现问题。 这是我的 Docker 撰写文件:
version: '3.9'
services:
#Flask App
app:
build: ./app
ports:
- "8000:5000"
depends_on:
- "questions-db"
networks:
- mongo-net
#Mongo Database
questions-db:
build: ./questions_db
hostname: questions-db
container_name: questions-db
ports:
- "27017:27017"
networks:
- mongo-net
networks:
mongo-net:
driver: bridge
当我运行“docker compose up”时,我在 Flask 容器启动时收到以下错误:
pymongo.errors.OperationFailure: command find requires authentication
full error: {'ok': 0.0, 'errmsg': 'command find requires authentication', 'code': 13, 'codeName': 'Unauthorized'}
MongoDB 将所有用户凭据存储在管理数据库中,除非您使用的是非常古老的版本。
在 URI 中使用authSource=admin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.