本地 AI:n8n + Ollama + Docker Desktop 配置

1. 本地 AI:n8n + Ollama + Docker Desktop 配置

在本地搭建 AI 工作流(n8n 编排 + Ollama 本地模型)前,需要先铺好三层基础:Docker 镜像源配置(解决拉取镜像的网络问题)、WSL 环境(Docker Desktop 的运行底座)、n8n 容器部署。本文按这三块给出可直接复制使用的配置。

[!info] 阅读导览
第 1 章 Docker 镜像源与配置(daemon.json、镜像源汇总、汉化包) → 第 2 章 WSL(网络重置、分发版管理) → 第 3 章 n8n 部署(模板、逐行注释、实际内容)

2. Docker 镜像源与配置

2.1. 🔗 镜像源地址

以下是常用的 Docker 镜像源地址,根据网络环境选择合适的源:

"registry-mirrors": [
  "https://docker.1ms.run",
  "https://docker.m.daocloud.io",
  "https://docker.1panel.live",
  "https://dockerproxy.net",
  "https://docker.xuanyuan.me",
  "https://docker-0.unsee.tech",
  "https://registry.cyou"
]

2.2. 📝 添加镜像源后的完整配置

[!NOTE]
这段配置是 Docker 的 daemon.json 配置文件内容

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://dockerproxy.net",
    "https://docker.xuanyuan.me",
    "https://docker-0.unsee.tech",
    "https://registry.cyou"
  ]
}

2.3. ⚙️ Docker Engine 原始配置

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

2.4. 🔗 GitHub 上的镜像源汇总地址

📚 以下是 GitHub 上维护的 Docker 镜像源汇总项目,可以获取最新的可用镜像源:

项目名称 仓库地址 描述
DockerHub https://github.com/dongyubin/DockerHub 个人维护的 Docker 镜像源列表
Docker-Proxy https://github.com/dqzboy/Docker-Proxy Docker 代理镜像源
public-image-mirror https://github.com/DaoCloud/public-image-mirror DaoCloud 公共镜像源

2.5. 🌏 Docker Desktop 汉化包

💡 具体使用方法请查看 ReadMe.md

🔗 汉化包地址https://github.com/asxez/DockerDesktop-CN

3. WSL

3.1. WSL 网络

3.1.1. 重置 WSL 网络和系统配置

执行以下命令 重置 WSL 网络配置(解决网络异常问题):

netsh winsock reset
netsh int ip reset all

重启 Windows 电脑,确保配置生效。

3.2. 查看可用的 Linux 分发版列表

wsl.exe --list --verbose

3.3. 安装指定的 Linux 分发版

wsl.exe --install [Distro]

3.4. 检查 WSL 版本与设置默认分发版

wsl.exe --list --verbose

若要设置与 wsl 命令一起使用的默认 Linux 分发版,请输入:

wsl.exe --set-default <Distro>

[!note]
<Distro> 替换为你使用的 Linux 分发版的名称。例如,在 PowerShell 中输入 wsl -s Debian 可将默认分发设置为 Debian。之后从 PowerShell 运行 wsl npm init,就会在 Debian 中执行 npm init 命令。

4. n8n

4.1. 配置模板

docker volume create n8n_data

docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e GENERIC_TIMEZONE="<YOUR_TIMEZONE>" \
 -e TZ="<YOUR_TIMEZONE>" \
 -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
 -e N8N_RUNNERS_ENABLED=true \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

4.2. 部署 n8n 的 Docker 命令详细注释

[!tip] 阅读提示
以下为逐行教学注释版,且额外加入了 PostgreSQL 环境变量(生产环境推荐)。直接复制运行前,请先去掉每行 \ 后的注释;如仅本地体验,可省略全部 DB_ 参数(n8n 默认使用 SQLite)。

# 第一步:创建一个名为n8n_data的Docker数据卷(用于持久化n8n的核心数据,避免容器删除后数据丢失)
# Docker数据卷是独立于容器生命周期的存储方式,安全性和可移植性更强
docker volume create n8n_data

# 第二步:运行n8n容器,以下是逐参数注释
docker run -it --rm \
 --name n8n \
 -p 5678:5678 \
 -e GENERIC_TIMEZONE="<YOUR_TIMEZONE>" \
 -e TZ="<YOUR_TIMEZONE>" \
 -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
 -e N8N_RUNNERS_ENABLED=true \
 -e DB_TYPE=postgresdb \
 -e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
 -e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
 -e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
 -e DB_POSTGRESDB_USER=<POSTGRES_USER> \
 -e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
 -e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

参数含义:

参数 说明
--name n8n 给容器命名为 n8n,方便后续用 docker 命令管理
-p 5678:5678 端口映射:主机 5678 端口映射到容器内 5678 端口,外部通过 http://主机IP:5678 访问 n8n Web 界面
GENERIC_TIMEZONE / TZ 应用层与系统层时区,保持一致(如 Asia/Shanghai
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true 强制 n8n 对配置文件设置合理权限(安全优化)
N8N_RUNNERS_ENABLED=true 启用 n8n 运行器功能(支持分布式执行工作流)
DB_TYPE=postgresdb 指定数据库类型为 PostgreSQL(默认 SQLite,生产环境推荐 PostgreSQL)
DB_POSTGRESDB_DATABASE / _HOST / _PORT / _USER / _SCHEMA / _PASSWORD PostgreSQL 连接信息:库名、主机、端口(默认 5432)、用户名、模式(默认 public)、密码,均需替换为实际值
-v n8n_data:/home/node/.n8n 数据卷挂载:n8n 配置、凭证等核心数据持久化到 n8n_data
docker.n8n.io/n8nio/n8n n8n 官方镜像;如需指定版本可加标签,如 :1.20.0

4.3. 实际内容

docker volume create n8n_data

docker run -it  \
 --name n8n \
 -p 5678:5678 \
 -e GENERIC_TIMEZONE="Asia/Shanghai" \
 -e TZ="Asia/Shanghai" \
 -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
 -e N8N_RUNNERS_ENABLED=true \
 -v n8n_data:/home/node/.n8n \
 docker.n8n.io/n8nio/n8n

4.3.1. 补充说明

  1. 占位符替换:所有 <xxx> 格式的内容都需要你根据自己的实际环境替换,比如时区 Asia/Shanghai、PostgreSQL 数据库名 n8n_db 等。
  2. --rm 参数:容器停止运行后会自动删除容器本身(但不会删除挂载的数据卷 n8n_data,数据仍会保留),适合临时测试或避免残留无用容器。
  3. 数据库前置条件:按 3.3 的实际内容部署时,n8n 使用默认 SQLite,无需额外配置数据库;若按 3.2 注释版接入 PostgreSQL,则需提前搭建好可访问的 PostgreSQL(本地或远程),并创建好对应的数据库和用户。

4.3.2. 总结

  1. 这段命令的核心是创建持久化数据卷 + 运行 n8n 容器(可选关联 PostgreSQL),兼顾数据安全和生产环境可用性。
  2. 关键参数分为三类:端口映射(外部访问)、环境变量(配置 n8n 和时区)、数据卷挂载(持久化数据)。
  3. 所有 <xxx> 占位符必须替换为实际环境信息,否则容器无法正常启动。

[!success] 核心要点

  • Docker:镜像源写入 daemon.jsonregistry-mirrors,加速本地拉取
  • WSL:网络异常先 netsh winsock reset + netsh int ip reset all 并重启
  • n8ndocker volume create n8n_data + docker run 即可;默认 SQLite 开箱即用,生产环境再接入 PostgreSQL
  • 部署完成后,n8n 的 Web 界面访问地址为 http://主机IP:5678