我正在嘗試使用與其交互的 python 應(yīng)用程序運行數(shù)據(jù)庫。我使用以下命令運行數(shù)據(jù)庫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訪問數(shù)據(jù)庫:pymongo考慮到/data/db卷從主機映射到容器,我希望使用 訪問相同的數(shù)據(jù)庫。然而,如下所示,我訪問另一個數(shù)據(jù)庫(一個帶有“todos”、“test_db”和“db”但沒有“config”的數(shù)據(jù)庫)[如果這改變了某些內(nèi)容,這個python在主機上運行,而不是在應(yīng)用程序容器中運行]: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?
1 回答

泛舟湖上清波郎朗
TA貢獻1818條經(jīng)驗 獲得超3個贊
我們沒有將27017容器的端口轉(zhuǎn)發(fā)mongodb到localhost,因此沒有應(yīng)用程序在運行l(wèi)ocalhost:27017。
我們可以直接通過主機的 IP 地址訪問容器,也可以創(chuàng)建一個從 docker 主機轉(zhuǎn)發(fā)到容器的端口,這樣我們就可以通過localhost:27017.
為了做到后者,我們修改添加一個ports部分到容器mongodb中docker-compose.yml:
version: "3.8"
services:
...
mongo:
image: mongo:latest
container_name: mongodb
...
ports:
- 27017:27017
...
添加回答
舉報
0/150
提交
取消