python - 将MongoDB与Docker组合使用,无法从本地数据库认证和下载数据

标签 python mongodb docker docker-compose

我试图在Windows powershell(Docker Desktop)中将MongoDB与Docker结合使用,并使用以下docker-compose.yml:

version: '3.7'
services: 
   mongodb_container:
        image: mongo:latest
        container_name: mongodb
        environment:
            - MONGO_INITDB_ROOT_USERNAME=root
            - MONGO_INITDB_ROOT_PASSWORD=root
            - MONGO_INITDB_DATABASE=test
        ports:
            - 27017:27017
        volumes:
            - mongodb_data_container:/data/db 

volumes:
     mongodb_data_container: 

当我尝试使用docker-compose up -d --builddocker exec -it <container_id> /bin/bashmongo -u root -p root --authenticationDatabase test对数据库进行身份验证时,它在日志中产生以下错误:
MongoDB shell version v4.2.6
connecting to: mongodb://127.0.0.1:27017/?authSource=test&compressors=disabled&gssapiServiceName=mongodb
2020-04-23T14:22:56.890+0000 E  QUERY    [js] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-04-23T14:22:56.893+0000 F  -        [main] exception: connect failed
2020-04-23T14:22:56.894+0000 E  -        [main] exiting with code 1

当我尝试从由docker-compose设置气流设置的本地数据库中下载数据时,产生了以下日志错误:
[2020-04-23 14:30:15,763] {taskinstance.py:1128} ERROR - 127.0.0.1:27017: [Errno 111] Connection refused
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/airflow/models/taskinstance.py", line 966, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 113, in execute
    return_value = self.execute_callable()
  File "/usr/local/lib/python3.5/dist-packages/airflow/operators/python_operator.py", line 118, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/usr/local/airflow/dags/missing_title.py", line 32, in download_db
    df =  pd.DataFrame(list(collection3.find())).drop(['_id'], axis=1)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/cursor.py", line 1156, in next
    if len(self.__data) or self._refresh():
  File "/usr/local/lib/python3.5/dist-packages/pymongo/cursor.py", line 1050, in _refresh
    self.__session = self.__collection.database.client._ensure_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1810, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1763, in __start_session
    server_session = self._get_server_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/mongo_client.py", line 1796, in _get_server_session
    return self._topology.get_server_session()
  File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 485, in get_server_session
    None)
  File "/usr/local/lib/python3.5/dist-packages/pymongo/topology.py", line 209, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: 127.0.0.1:27017: [Errno 111] Connection refused

如何使用docker-compose访问MongoDB数据库? (当我尝试在docker外部使用pymongo和Jupiter Notebook从MongoDB数据库本地下载数据时,我可以)

最佳答案

删除行:

- MONGO_INITDB_DATABASE=test

从docker compose文件中,然后将身份验证数据库设置为admin(默认值)
mongo -u root -p root --authenticationDatabase admin

那将解决第一个问题。

对于第二个问题,将连接配置为使用容器名称,例如mongodb:27017而不是127.0.0.1:27017

关于python - 将MongoDB与Docker组合使用,无法从本地数据库认证和下载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61389853/

相关文章:

java - 发现异常或服务器正在运行时自动停止 "tail -f catalina.out"

c# - 将 ExpandoObject 持久化到 MongoDB

javascript - 如何在不知道其位置的情况下删除 Mongo 对象(向下嵌套 2 个数组)?

php - 如何使用 nginx 和 php 进行没有 .php 扩展名的路由

python - 如何通过代码重新启动pythonanywhere控制台

python - 如何将分类数据从 numpy 数组加载到指标或嵌入列中?

node.js - 引用 Mongoose 模式的类型错误

docker - 尝试构建Docker镜像时发生错误:无法调用gRPC:无法升级到H2C,收到500

docker - 用logstash解析docker日志

python - 将 jupyter notebook 转为 python 脚本的最佳实践