无法使用 pymongo 访问 dockerized MongoDB(使用 mongo express)- 被定向到另一个数据库
Can't access dockerized MongoDB (with mongo express) using pymongo - gets directed to another db
我正在尝试 运行 一个带有 python 与之交互的应用程序的数据库。我有数据库 运行ning 使用此 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 访问数据库:
并且我希望使用 pymongo
访问相同的数据库,因为 /data/db 卷已从主机映射到容器。
但是,如下所示,我访问了另一个数据库(一个带有“todos”、“test_db”和“db”但没有“config”的数据库)[This 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 个数据库?
我们没有将容器 mongodb
的端口 27017
转发到 localhost
,因此 localhost:27017
上没有应用程序 运行。
我们可以直接通过主机的 IP 地址访问容器,或者我们可以创建一个从 docker 主机到容器的端口转发,这样我们就可以访问 mongo通过 localhost:27017
.
的数据库
为了实现后者,我们修改了在 docker-compose.yml
中向容器 mongodb
添加一个 ports
部分:
version: "3.8"
services:
...
mongo:
image: mongo:latest
container_name: mongodb
...
ports:
- 27017:27017
...
我正在尝试 运行 一个带有 python 与之交互的应用程序的数据库。我有数据库 运行ning 使用此 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 访问数据库:
并且我希望使用 pymongo
访问相同的数据库,因为 /data/db 卷已从主机映射到容器。
但是,如下所示,我访问了另一个数据库(一个带有“todos”、“test_db”和“db”但没有“config”的数据库)[This 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 个数据库?
我们没有将容器 mongodb
的端口 27017
转发到 localhost
,因此 localhost:27017
上没有应用程序 运行。
我们可以直接通过主机的 IP 地址访问容器,或者我们可以创建一个从 docker 主机到容器的端口转发,这样我们就可以访问 mongo通过 localhost:27017
.
为了实现后者,我们修改了在 docker-compose.yml
中向容器 mongodb
添加一个 ports
部分:
version: "3.8"
services:
...
mongo:
image: mongo:latest
container_name: mongodb
...
ports:
- 27017:27017
...