Docker 部署(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/topoteretes/cognee/10.1-docker-deployment
翻译时间:2026-05-27T08:45:17.117Z
翻译模型:deepseek-chat
原文字符数:10528
项目:Cognee (cognee)
---
Docker 部署
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
.github/actions/image_builder/action.yaml.github/workflows/community_greetings.yml.github/workflows/dockerhub-mcp.yml.github/workflows/dockerhub.yml.github/workflows/release_discord_action.ymlDockerfileLICENSEbin/dockerizecognee-mcp/Dockerfilecognee-mcp/README.mdcognee-mcp/entrypoint.shcognee-mcp/pyproject.tomlcognee-mcp/src/__init__.pycognee-mcp/src/client.pycognee-mcp/src/cognee_client.pycognee-mcp/src/server.pycognee-mcp/uv.lockcognee/alembic/versions/7c5d4e2f8a91_add_parent_user_id_to_users.pycognee/modules/users/authentication/default/default_transport.pycognee/modules/users/authentication/get_api_auth_backend.pycognee/modules/users/authentication/get_client_auth_backend.pycognee/tests/unit/test_add_parent_user_id_migration.pydocker-compose.ymlentrypoint.sh
目的与范围
本文档记录了基于 Docker 的 Cognee 部署方案,包括多服务 Docker Compose 配置、基于配置文件的(Profile)服务激活机制,以及使用 uv 包管理器的多阶段构建流程。Cognee 设计为高度可移植,既支持本地容器化开发,也支持使用外部数据库的生产级部署。
---
Docker Compose 架构
Cognee 使用模块化的 docker-compose.yml 文件,将服务按逻辑组织到不同的配置文件中。这允许用户只启动他们需要的组件(例如,仅启动 API,或启动 API 配合 Neo4j 图数据库)。
系统组件图
下图展示了各个 Docker 服务之间的关系,以及它们如何通过共享的 cognee-network 网络进行交互。
graph TD
subgraph "核心服务"
cognee["cognee<br/>(FastAPI 服务器)<br/>端口 8000"]
redisinsight["redisinsight<br/>(Redis 用户界面)<br/>端口 5540"]
end
subgraph "配置文件: mcp"
cognee_mcp["cognee-mcp<br/>(MCP 服务器)<br/>端口 8000"]
end
subgraph "配置文件: ui"
frontend["frontend<br/>(Next.js 用户界面)<br/>端口 3000"]
end
subgraph "数据库配置文件"
postgres["postgres<br/>(pgvector/pg17)<br/>端口 5432"]
neo4j["neo4j<br/>(Neo4j 5.26)<br/>端口 7687"]
chromadb["chromadb<br/>(Chroma 0.6.3)<br/>端口 3002"]
redis["redis<br/>(Redis 7-alpine)<br/>端口 6379"]
end
subgraph "基础设施"
network["cognee-network"]
env_file[".env 配置"]
vol_pg["postgres_data"]
vol_ch["chromadb_data"]
vol_rd["redis_data"]
end
cognee --> network
cognee_mcp --> network
frontend --> network
postgres --> network
neo4j --> network
chromadb --> network
redis --> network
env_file -.-> cognee
env_file -.-> cognee_mcp
postgres --> vol_pg
chromadb --> vol_ch
redis --> vol_rd
来源: docker-compose.yml:1-185
---
Docker 镜像构建过程
使用 uv 的多阶段构建
Cognee 采用多阶段构建策略,在保持高性能构建环境的同时,最小化最终镜像大小。它利用 ghcr.io/astral-sh/uv 来处理依赖解析和虚拟环境创建。
阶段 1:构建器(uv) 此阶段安装系统依赖(例如用于 PostgreSQL 支持的 libpq-dev),并使用 uv.lock 同步 Python 环境。
# 首先构建依赖以实现层缓存
COPY README.md pyproject.toml uv.lock entrypoint.sh ./
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --extra debug --extra api --extra postgres --extra neo4j \
--frozen --no-install-project --no-dev --no-editable
来源: Dockerfile:1-35
阶段 2:运行时 最终镜像基于 python:3.12-slim-bookworm。它从构建器阶段复制预构建的环境,并设置 PATH 以包含虚拟环境。
COPY --from=uv /app /app
ENV PATH="/app/.venv/bin:$PATH"
ENV PYTHONPATH=/app
ENTRYPOINT ["/app/entrypoint.sh"]
来源: Dockerfile:49-72
MCP 服务器镜像构建
MCP 服务器遵循一个复杂的多阶段模式,包括一个 Node.js 阶段,用于在 Python 环境设置之前构建工作区用户界面包(Next.js/Vite)。
阶段 1:Node 构建 构建位于 cognee-mcp/apps-src 中的用户界面包,生成 visualize-graph.html。 来源: cognee-mcp/Dockerfile:1-10
阶段 2:Python 构建器 使用 uv 从 cognee-mcp/pyproject.toml 和 cognee-mcp/uv.lock 安装依赖。 来源: cognee-mcp/Dockerfile:13-56
阶段 3:入口点逻辑 MCP 的 entrypoint.sh 包含逻辑,可以在运行时动态安装额外的 cognee 扩展包(如果提供了 EXTRAS 环境变量)。 来源: cognee-mcp/entrypoint.sh:7-40
---
服务配置文件与配置
配置文件激活
Cognee 中的服务通过 Docker Compose 配置文件进行门控。要运行特定的服务栈,请使用 --profile 标志:
| 配置文件 | 命令 | 包含的服务 |
|---|---|---|
| 默认 | docker compose up | cognee, redisinsight |
| mcp | docker compose --profile mcp up | cognee-mcp |
| ui | docker compose --profile ui up | frontend |
| postgres | docker compose --profile postgres up | postgres (pgvector) |
| neo4j | docker compose --profile neo4j up | neo4j (含 APOC/GDS) |
| chromadb | docker compose --profile chromadb up | chromadb |
| redis | docker compose --profile redis up | redis |
来源: docker-compose.yml:43-157
环境配置
cognee 和 cognee-mcp 服务依赖环境变量来配置数据库连接和大语言模型(LLM)提供商设置。
| 变量 | 描述 | 文件引用 |
|---|---|---|
DB_PROVIDER | 数据库类型(例如 sqlite, postgres) | docker-compose.yml:62 |
TRANSPORT_MODE | MCP 传输模式(例如 sse, http, stdio) | docker-compose.yml:60, cognee-mcp/entrypoint.sh:45 |
CORS_ALLOWED_ORIGINS | API 访问允许的来源 | docker-compose.yml:21 |
EXTRAS | MCP 服务器的运行时 cognee 扩展包 | cognee-mcp/entrypoint.sh:7 |
API_URL | MCP 服务器在 API 模式下连接 Cognee 的 URL | cognee-mcp/entrypoint.sh:63 |
---
数据流与初始化
入口点执行流程
当 cognee 容器启动时,entrypoint.sh 脚本管理数据库迁移和服务器启动。
sequenceDiagram
participant OS as Docker 容器
participant EP as entrypoint.sh
participant AL as Alembic
participant SU as setup.py
participant GN as Gunicorn/Uvicorn
OS->>EP: 执行 ENTRYPOINT
EP->>AL: cd cognee && alembic upgrade head
alt 迁移失败
AL-->>EP: 错误码
EP->>SU: python cognee/modules/engine/operations/setup.py
SU-->>EP: 表已初始化
else 迁移成功
AL-->>EP: 成功
end
EP->>EP: sleep 2 (等待数据库)
alt ENVIRONMENT == dev/local AND DEBUG == true
EP->>GN: debugpy --wait-for-client ... cognee.api.client:app
else 生产环境
EP->>GN: gunicorn -w 1 ... cognee.api.client:app
end
来源: entrypoint.sh:15-53
MCP 服务器连接模式
cognee-mcp 服务器使用 CogneeClient 来确定其操作模式。它可以运行"直接模式"(使用本地 cognee 库)或"API 模式"(作为远程服务器的客户端)。
graph LR
subgraph "Docker 网络"
MCP["cognee-mcp 容器"]
API["cognee 容器"]
HOST["宿主机"]
end
MCP -- "API_URL: host.docker.internal" --> API
MCP -- "直接访问" --> LIB["cognee 库"]
API -- "内部桥接" --> DB["Postgres/Neo4j"]
来源: cognee-mcp/src/cognee_client.py:31-68, cognee-mcp/entrypoint.sh:63-89
---
卷挂载与持久化
主机文件入库
要将主机上的文件导入到容器化的 Cognee 实例中,用户必须将主机目录挂载到容器中。
volumes:
- ./cognee:/app/cognee
- .env:/app/.env
# 取消注释以允许从主机导入本地文件:
# - /path/to/your/data:/data
来源: docker-compose.yml:10-14
MCP 服务器实现中包含一个针对 Docker 环境的检查,当使用本地文件路径而未进行卷挂载时,会提供有用的错误消息。 来源: cognee-mcp/src/server.py:155-158
数据库持久化
使用命名卷来确保数据库引擎的数据在容器重建后仍然存在:
postgres_data映射到/var/lib/postgresql/datadocker-compose.yml:183chromadb_data映射到/chroma/chroma/docker-compose.yml:131redis_data映射到/datadocker-compose.yml:163
---
部署汇总表
| 特性 | 实现细节 | 来源 |
|---|---|---|
| 基础镜像 | python:3.12-slim-bookworm | Dockerfile:49 |
| 包管理器 | uv | Dockerfile:2, cognee-mcp/Dockerfile:13 |
| 服务器引擎 | gunicorn 配合 UvicornWorker | entrypoint.sh:48 |
| 健康检查 | curl -f http://localhost:8000/health | docker-compose.yml:29 |
| 网络 | cognee-network (桥接) | docker-compose.yml:178 |
| 默认端口 | 8000 | docker-compose.yml:26 |
来源: Dockerfile:1-73, docker-compose.yml:1-185, entrypoint.sh:1-55, cognee-mcp/entrypoint.sh:1-102