client = MongoClient(“mongodb://admin:password@mongodb:27017/“)这里面的地址中有两个mongodb,分别代表什么

完整连接字符串结构:

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” 分别指什么?

✅ 第一个是协议头的一部分:

"mongodb://..."
  • 这是连接 MongoDB 数据库的“协议名称”
  • 和你访问网页用 http:// 一样,固定写法
  • 表明你是要连 Mongo,而不是连 MySQL、Redis 等其他数据库

✅ 第二个是 Docker Compose 中的服务名:

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 容器并进行增删查改。
  • 使用 pymongo 作为 Mongo 的客户端。

✅ 1. 安装 pymongo 依赖

你需要确保你的 backend 服务镜像中安装了 pymongo,你可以在 backend/Dockerfile 中添加一行:

RUN pip install pymongo

✅ 2. backend 容器中写一个连接数据库的 Python 脚本(比如放在 /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)

✅ 3. 如何执行这个脚本?

确保你已经启动了 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 驱动

你可能感兴趣的:(docker部署,mongodb,数据库,docker,容器,运维)