使用 Docker 安装和部署 LangGraph,通常有两种主流场景:

  1. 本地开发/测试(轻量级):直接在 Docker 容器中运行你编写的 LangGraph Python 应用(结合 Celery 或 FastAPI)。

  2. 生产级/官方平台部署(功能完整):使用 LangGraph 官方推出的 LangGraph Server(或 LangGraph Studio 后端),它自带了高可用的图状态管理、持久化存储和 API 路由。

下面为你分别提供这两种场景的 Docker 安装与部署指南。

方案一:使用官方 LangGraph Server 部署(推荐,带 API 和 UI 支持)

LangGraph 官方提供了一个专为生产环境设计的服务器,可以通过 langgraph-cli 快速生成 Docker 配置,自动集成 PostgreSQL(用于图形状态持久化)。

1. 前置准备

首先,在你的项目根目录下确保有以下两个文件:

  • requirements.txt:包含你的 LangGraph 代码所需的依赖。

  • langgraph.json:LangGraph 的配置文件,指定你的图(Graph)在哪里。

langgraph.json 示例:

JSON

{
  "dependencies": ["."],
  "graphs": {
    "my_agent": "./agent.py:graph"
  }
}

2. 生成并运行 Docker 容器

在本地开发环境中,你可以使用 langgraph-cli 直接构建并启动 Docker 镜像。

Bash

# 1. 安装 langgraph 命令行工具
pip install langgraph-cli

# 2. 在项目根目录下执行(它会自动检测 Docker 环境并构建镜像)
langgraph dev

提示langgraph dev 会在后台自动拉取本地 Docker,并启动一个集成了 LangGraph 运行时和 PostgreSQL 的容器集群。你可以直接访问本地的 LangGraph Studio 网页端(通常是 http://localhost:2024)进行可视化调试。

方案二:自定义 Dockerfile 部署(适合生产环境、微服务架构)

如果你想将 LangGraph 作为标准的微服务(例如配合 FastAPI 或 Celery)嵌入到你现有的 Docker 编排(K8s/Docker Compose)中,建议自定义 Dockerfile

这里以 FastAPI + LangGraph + PostgreSQL 为例:

1. 编写 Dockerfile

在项目根目录下创建 Dockerfile

Dockerfile

# 使用官方轻量级 Python 镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 安装系统依赖(如 psycopg2 编译所需的工具)
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Rebuild 你的应用代码
COPY . .

# 暴露 FastAPI 端口
EXPOSE 8000

# 启动命令(以 uvicorn 运行 FastAPI 为例)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

2. 编写 docker-compose.yml(管理状态持久化)

由于 LangGraph 的核心优势在于状态管理(State Management)和断点续传(Time-travel),它必须依赖数据库(推荐 PostgreSQL)。通过 Docker Compose 可以一键拉取应用和数据库。

YAML

version: '3.8'

services:
  # LangGraph 应用服务
  langgraph_app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://postgres:secret@postgres_db:5432/langgraph_storage
      - OPENAI_API_KEY=your_openai_key_here
      - DEEPSEEK_API_KEY=your_deepseek_key_here
    depends_on:
      - postgres_db

  # PostgreSQL 状态存储服务
  postgres_db:
    image: postgres:16-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=langgraph_storage
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

3. 在 Python 代码中连接 Docker 数据库

在你的 agent.pymain.py 中,使用 ConnPoolPostgresSaver(LangGraph 提供的 Postgres 检查点存储器)来连接 Docker 内的数据库:

Python

import os
from langgraph.checkpoint.postgres import ConnPoolPostgresSaver
from psycopg_pool import ConnectionPool

# 从环境变量获取 Docker 内部的数据库连接串
DB_URI = os.getenv("DATABASE_URL", "postgresql://postgres:secret@localhost:5432/langgraph_storage")

# 创建连接池并初始化 LangGraph 的 Checkpointer
pool = ConnectionPool(conninfo=DB_URI, max_size=10)
memory = ConnPoolPostgresSaver(pool)

# 在编译图时,传入 memory
# graph = workflow.compile(checkpointer=memory)

4. 启动容器

docker-compose.yml 所在目录下执行:

Bash

# 后台启动所有容器
docker-compose up -d

# 查看运行日志
docker-compose logs -f langgraph_app

总结:我该选哪种?

  • 如果你处于开发阶段,想要可视化界面调试智能体的工作流:首选 方案一,利用 langgraph dev 让官方工具链帮你接管 Docker。

  • 如果你准备部署到生产环境、或者需要跟现有的自建 API 网关(如 APISIX)和微服务对接:首选 方案二,通过 Dockerfile + docker-compose(或 K8s)进行标准化容器化部署。