如何解决无法使用pymongo访问经过dockerized的MongoDB带有mongo express-被定向到另一个数据库
我正在尝试使用与其交互的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
考虑到 / data / db 卷从主机映射到容器,我希望使用pymongo
访问相同的数据库。
但是,如下所示,我访问另一个数据库(一个带有“ 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?
解决方法
我们没有将容器27017
的端口mongodb
转发到localhost
,因此localhost:27017
上没有运行任何应用程序。
我们可以直接通过主机的IP地址访问容器,也可以创建从Docker主机转发到容器的端口,以便我们可以通过localhost:27017
访问mongo数据库。
要做到后者,我们将ports
的一个mongodb
部分添加到容器docker-compose.yml
中:
version: "3.8"
services:
...
mongo:
image: mongo:latest
container_name: mongodb
...
ports:
- 27017:27017
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。