无法使用 pymongo 访问 dockerized MongoDB

我正在尝试使用与其交互的 python 应用程序运行数据库。我使用以下命令运行数据库docker-compose.yml:


version: "3.8"

services:

    flask_app:

        build: ./flask_app

        container_name: flask_app

        ports:

            - "5000:5000"

    mongo:

        image: mongo:latest

        container_name: mongodb

        environment:

            - MONGO_INITDB_ROOT_USERNAME=root

            - MONGO_INITDB_ROOT_PASSWORD=pass

        volumes:

            - /data/db:/data/db

    mongo-express:

        image: mongo-express:latest

        container_name: mongo_express

        environment:

            - ME_CONFIG_MONGODB_SERVER=mongo

            - ME_CONFIG_MONGODB_PORT=27017

            - ME_CONFIG_MONGODB_ENABLE_ADMIN=true

            - ME_CONFIG_MONGODB_AUTH_DATABASE=admin

            - ME_CONFIG_MONGODB_ADMINUSERNAME=root

            - ME_CONFIG_MONGODB_ADMINPASSWORD=pass

            # Uncomment if a secure login via browser is required

            # - ME_CONFIG_BASICAUTH_USERNAME=root

            # - ME_CONFIG_BASICAUTH_PASSWORD=pass

        links:

            - mongo

        ports:

            - 8081:8081

我可以在localhost:8081访问数据库:

http://img3.mukewang.com/64b652c60001fca313590505.jpg

pymongo考虑到/data/db卷从主机映射到容器,我希望使用 访问相同的数据库。


然而,如下所示,我访问另一个数据库(一个带有“todos”、“test_db”和“db”但没有“config”的数据库)[如果这改变了某些内容,这个python在主机上运行,而不是在应用程序容器中运行]:


In [1]: from pymongo import MongoClient; client = MongoClient(host='localhost', port=27017)


In [2]: client.list_database_names()

Out[2]: ['admin', 'local', 'db', 'todos', 'test_db']

我在这里缺少什么?为什么有2个DB?


胡说叔叔
浏览 98回答 1
1回答

泛舟湖上清波郎朗

我们没有将27017容器的端口转发mongodb到localhost,因此没有应用程序在运行localhost:27017。我们可以直接通过主机的 IP 地址访问容器,也可以创建一个从 docker 主机转发到容器的端口,这样我们就可以通过localhost:27017.为了做到后者,我们修改添加一个ports部分到容器mongodb中docker-compose.yml:version: "3.8"services:    ...    mongo:        image: mongo:latest        container_name: mongodb        ...        ports:            - 27017:27017    ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python