MongoClient("mongodb://用户名:密码@主机名:端口号/数据库名")
也就是:
MongoClient("mongodb://admin:password@mongodb:27017/")
这个字符串分成几个部分来看:
部分 | 含义 | 举例 | 说明 |
---|---|---|---|
mongodb:// |
协议头 | 固定写法 | 就像 http:// 或 ftp:// 一样,表示用 MongoDB 协议 |
admin:password |
用户名和密码 | admin:password |
用于认证 Mongo 的账号密码 |
@mongodb |
主机名 | mongodb |
指的是 Docker Compose 中服务的名字(不是写错的“重复”) |
:27017 |
端口号 | 27017 | MongoDB 默认端口 |
/ |
默认数据库 | 可省略 | 默认连接哪个数据库,不写就是 admin |
"mongodb://..."
http://
一样,固定写法services:
mongodb: 就是这个名字
image: mongo:latest
在这段代码里:
MongoClient("mongodb://admin:password@**mongodb**:27017/")
这个 mongodb
就是 Docker 网络下的主机名,表示你要连接的容器服务名称。
在 Docker Compose 里,每个服务名都会被自动注册成网络内的 DNS 名。
在你当前的 Docker Compose 网络里,这个连接地址:
mongodb:27017
就相当于连接到这个服务:
services:
mongodb:
...
所以你写的是:
MongoClient("mongodb://admin:password@mongodb:27017/")
实际上就是:使用 MongoDB 协议连接 mongodb 这个容器的 27017 端口,用 admin/password 登录。
地址 | 含义 |
---|---|
http://localhost:3000 |
浏览器访问本机 3000 端口 |
http://backend:8000 |
Docker Compose 中访问 backend 服务的 8000 端口 |
mongodb://root:abc123@db:27017 |
用 root 用户连接 db 容器中的 MongoDB |
MongoClient("mongodb://admin:password@mongodb:27017/")
mongodb://
表示使用 MongoDB 协议(固定写法)mongodb
是你在 docker-compose.yaml
中写的服务名 mongodb
,代表连接的是这个容器里的 Mongo 服务在 Docker Compose 项目中,如何从 backend 服务 连接到 MongoDB 服务,并插入和读取数据,跨服务连接、真实可跑,举一个跨服务连接数据库的完整 Python 例子。
你在 docker-compose.yaml
中配置过:
services:
mongodb:
container_name: mongodb
image: mongo:latest
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
networks:
- ragsaas-network
backend:
container_name: backend
build:
context: ./backend
networks:
- ragsaas-network
我们要做的:
backend
容器内部写一个 Python 程序,连接 MongoDB 容器并进行增删查改。你需要确保你的 backend
服务镜像中安装了 pymongo
,你可以在 backend/Dockerfile
中添加一行:
RUN pip install pymongo
/app/db_test.py
):from pymongo import MongoClient
# 连接 MongoDB:用户名admin,密码password,连接服务名为mongodb的容器
client = MongoClient("mongodb://admin:password@mongodb:27017/")
# 选择数据库和集合
db = client["RAGSAAS"] # 数据库名
collection = db["users"] # 集合名(相当于表)
# 插入一条数据
user = {"name": "学生", "age": 28, "job": "程序员"}
insert_result = collection.insert_one(user)
print("插入成功,ID:", insert_result.inserted_id)
# 查询数据
print("查询结果:")
for doc in collection.find():
print(doc)
确保你已经启动了 Docker Compose:
docker-compose up -d
然后在后台容器中运行脚本:
docker-compose exec backend python /app/db_test.py
你会看到输出类似于:
插入成功,ID: 665f01234567abcde
查询结果:
{'_id': ObjectId('665f01234567abcde'), 'name': '学生', 'age': 28, 'job': '程序员'}
步骤 | 说明 |
---|---|
mongodb://admin:password@mongodb:27017/ |
表示从 backend 容器连接 mongodb 容器中的 MongoDB |
admin / password |
是你在 environment 中定义的 MongoDB root 账户 |
mongodb |
是 Docker Compose 中的服务名,等同于容器的 DNS 地址 |
pymongo |
是官方推荐的 Python MongoDB 驱动 |