Mindket

用 Docker 自托管 n8n:安装、数据卷和更新

黑色横幅,带有 n8n 的标志,标题是“n8n 入门课”,下面是“第一个工作流、Webhook、AI 智能体与自托管”。

用 Docker 自托管 n8n,就是运行 n8nio/n8n 镜像,发布 5678 端口,再把一个卷挂载到 /home/node/.n8n,这样更新之后工作流和凭据都还在。n8n 的文档现在推荐,长期运行的部署用 Docker Compose,或者用一行命令的脚本来搭好。打开 http://localhost:5678,创建所有者账号就行。

本节内容

  • 在 Docker 里启动 n8n,并在 5678 端口打开编辑器。
  • 把数据放在卷里,更新永远不会把它清掉。
  • 先设好时区、Webhook 地址和其他重要的环境变量。
  • 用 n8n 文档给出的命令备份、更新和停止 n8n。
全部课程
本页目录
  1. 开始之前
  2. 在 Docker 里启动 n8n 的三种方式
  3. 用 docker run 运行 n8n
  4. n8n 推荐的方式:一行命令安装和 Compose
  5. 数据存在哪里,怎么备份
  6. 最先要设置的环境变量
  7. 更新时不丢任何东西
  8. n8n 团队怎么说一行命令安装和 n8n 3.0
  9. 常见错误
  10. 自己试一试
  11. 接下来学什么
  12. 自测一下
  13. 常见问题
  14. 资料来源

开始之前

你需要 Docker。Mac、Windows 或 Linux 上的 Docker Desktop 自带 Docker Engine 和 Docker Compose,n8n 的 Docker 页面就是按这个前提写的。

走 Compose 这条路,需要带 Compose v2 的 Docker Engine,所以 docker compose version 应该能打印出版本号,另外 n8n 说它这套服务至少需要 4 GB 内存和 2 个 vCPU。

在 Windows 上,n8n 让你用 WSL,并配合 Docker Desktop 的 WSL2 后端。自托管到底适不适合你,许可证允许做什么,什么是 n8n里有讲。简单说,给自己的业务用没问题,托管起来让客户自己搭工作流就不行。

在 Docker 里启动 n8n 的三种方式

n8n 的安装方式列出了一行命令安装、Docker Compose、npm、普通 Docker 和云服务商。一行命令安装的页面说,从 n8n 3.0 起,旧的 npm 方式对全新安装已经不再适用,n8n 只通过 Docker 分发。已有的 npm 安装还能继续用。

这个版本现在处于抢先体验阶段,发布公告说稳定版 12 月初推出。

README 的快速入门把一行脚本和两条命令的 Docker 运行并排放着。n8n 自己的 Docker 页面把普通的 docker run 标成了过时,并指向 Compose,所以下面的 run 命令,当作试用 n8n 的办法就好。

改变自托管方式的几次发布
  1. n8n 2.0

    一次带破坏性变更的大版本,跨大版本升级之前先读发布说明。

    来源:n8n Docs: Release notes (2026年11月5日 查阅)

  2. 一条命令自托管

    n8n 发布一行命令安装,自带 n8n Assistant,已经在跑的实例加上 --upgrade 就能升级。

    来源:n8n.io on X: one command to self-host n8n, 21 August 2026 (2026年11月5日 查阅)

  3. n8n 3.0 抢先体验

    自托管的 n8n 只跑在 Docker 上,npm 安装不再支持。稳定版预计 12 月初推出。

    来源:n8n Blog: Introducing n8n 3.0 (2026年11月5日 查阅)

出自 Docker、Docker Compose 和一行命令安装页面。
方式你得到什么n8n 怎么说
docker run一个带数据卷的容器文档页面被标成过时,并推荐使用 Docker Compose
一行命令安装一个脚本写好 compose.yml 和 .env,再用 SQLite 启动 n8n内置的 SQLite 数据库和自带的沙盒适合测试,生产环境要用 Postgres
Docker Compose同样这套服务,变成你自己保存、可以修改的文件,Postgres 可选推荐的方式,至少 4 GB 内存和 2 个 vCPU

用 docker run 运行 n8n

下面这条命令是 n8n 自己的快速入门,出自它的 Docker 页面。把两处时区占位符都换成你的时区。--rm 会在容器停止时把容器删掉,所以数据必须放在卷里。

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 \
 -v n8n_data:/home/node/.n8n \
 n8nio/n8n
  1. 安装 Docker,并确认 Docker 守护进程在运行。
  2. 用上面的命令创建卷并启动容器,两处都填上你的时区。
  3. 打开 http://localhost:5678,完成所有者设置。第一个完成设置的人就是所有者。
  4. 搭一个小工作流,停止容器,再把同样的命令运行一遍。工作流还在,因为它存在卷里,不在容器里。
  5. 想让 n8n 在后台一直运行,就加上 -d,n8n 在自己的更新步骤里也是这样做的。

n8n 推荐的方式:一行命令安装和 Compose

一行命令安装会先检查 Docker 是否在运行,在当前目录下创建一个 n8n 文件夹,写入 compose.yml、searxng-settings.yml 和带有自动生成密钥的 .env,然后下载并启动 n8n 及其沙盒服务。它打印出网址后,打开那个网址就行。你的数据在 ./n8n 和 Docker 卷 n8n-data 里。

真正代表 n8n 的那个服务很短。在脚本下载的这份 Compose 文件里,它拉取 docker.io/n8nio/n8n:${N8N_VERSION},发布 5678:5678,读取 .env,并把 n8n-data 挂载到 /home/node/.n8n。其余几个服务是为 n8n Assistant 和 Code 节点的任务准备的。只有 n8n 自己的端口应该对互联网开放。

这个脚本不能在命令提示符或 PowerShell 里运行,n8n 也没有验证过 Git Bash,所以 Windows 上要用 WSL。想自己写这些文件,就照着 Compose 指南做:填好 .env,创建 searxng-settings.yml,从 n8n 的仓库取得 compose.yml,再运行 docker compose up -d。

# fresh install: creates ./n8n with compose.yml and .env, then starts n8n
curl -fsSL https://get.n8n.io | sh

# stop it, then start it again
docker compose -f ./n8n/compose.yml down
docker compose -f ./n8n/compose.yml up -d

# upgrade, keeping your data, secrets and settings
curl -fsSL https://get.n8n.io | sh -s -- --upgrade

数据存在哪里,怎么备份

n8n 把所有东西都放在一个 .n8n 文件夹里。里面有 config 文件,存着加密你凭据的密钥,默认配置下还有 SQLite 数据库。在 Docker 里,这个文件夹就是挂载在 /home/node/.n8n 的 n8n_data 卷,这是备份指南里写的。没有对应的密钥,恢复出来的数据库或加密导出的文件都解不开。

  • 用 SQLite 时,复制文件夹之前先停掉 n8n。n8n 正在写入数据库时去复制,可能得到不一致的备份。
  • 只备份工作流和凭据,运行 n8n export:workflow --backup --output=backups/workflows/ 和 n8n export:credentials --backup --output=backups/credentials/,两条命令各用各的输出文件夹。
  • 在容器里,backups/ 文件夹不会被保留。重新创建容器之前,先把文件复制出来。
  • CLI 备份不包含用户和角色、执行记录、变量和实例设置。它可以把工作流迁到别的实例,却没法重建一个实例。
  • 每次更新之前,先做一次完整备份。

最先要设置的环境变量

每个变量,在 docker run 命令里用 -e 传入,时区那几行就是这样,用 Compose 则写进 .env。按代理页面的说法,在反向代理后面,n8n 还要求最后一层代理设置 X-Forwarded-For、X-Forwarded-Host 和 X-Forwarded-Proto 这几个请求头。

出自 Docker、代理和端点变量页面。
变量作用什么时候设置
GENERIC_TIMEZONE基于时间的节点(比如 Schedule Trigger)使用的时区一定要设,这样早上 8 点才是你的 8 点
TZ容器的系统时区和上一个一起设
N8N_WEBHOOK_URLn8n 在编辑器里显示、并登记给外部服务的公开基础网址。它取代 WEBHOOK_URL,后者从 n8n 2.35.0 起已弃用n8n 在反向代理后面时
N8N_PROXY_HOPSn8n 前面有几层反向代理,文档的示例把它设成 1n8n 在反向代理后面时
N8N_ENCRYPTION_KEY你自己的凭据加密密钥添加第一个凭据之前
N8N_PAYLOAD_SIZE_MAX请求体的最大值,单位 MiB,默认 16,重启后生效Webhook 要接收更大的文件时
DB_TYPE 与 DB_POSTGRESDB_*把数据库从 SQLite 换成 PostgreSQL团队或生产环境

更新时不丢任何东西

n8n 建议至少每月更新一次,因为几次小更新,比一次跨度很大的更新风险小。更新前先看发布说明里有没有破坏性变更,条件允许的话,先在测试实例上试一遍。它的更新指南把下面这些命令指向了 Docker 页面。

n8nio/n8n 这个标签是稳定版,n8nio/n8n:next 是不稳定版。凡是你要依赖的环境,我们会固定一个版本号,而不是跟着标签走,这样什么时候更新由你决定。Compose 这条路本来就是这样,版本号写在 .env 的 N8N_VERSION 里。

# a container started with docker run
docker pull n8nio/n8n
docker ps -a
docker stop <container_id>
docker rm <container_id>
docker run --name=<container_name> [options] -d n8nio/n8n

# a Docker Compose project
docker compose pull
docker compose down
docker compose up -d
  • 换容器的时候,卷会保留。没挂卷就启动的容器,是空的。
  • 一行命令的 --upgrade 只修改 .env 里的 N8N_VERSION 和 N8N_SANDBOX_VERSION,你的数据、密钥和设置都不动。

n8n 团队怎么说一行命令安装和 n8n 3.0

2026 年 8 月 21 日,n8n 团队在 X 上发布了一行命令安装。卖点是一条命令装好,AI Assistant 也包含在内,不用写 Compose 文件,也不用配环境变量。对已经在跑的实例,帖子的建议是同一条命令加上 --upgrade,也就是安装代码的最后一行。

2026 年 10 月 28 日,团队在 X 上宣布下一个大版本进入 beta。帖子说,这一版没有一堆新功能,而是提升可靠性、稳定性和安全性,再把一年来攒下的破坏性变更一次放进来,稳定版 12 月初推出。

Ophir Prusak 在 n8n 博客上写的发布公告说,自托管的 n8n 现在跑在 Docker 上,npm 和 npx n8n 安装不再支持。把在跑的实例升级到新版本之前,先更新到最新的 2.x,再打开 Settings 里的 Migration Report,它需要 2.39 或更高版本。先做一次完整备份,公告说得很直白:想退回去,只能靠恢复备份。

已经在自托管了?同一条命令,加上 --upgrade。

n8n.io, n8n 的官方账号,引文为译文 · X (2026年11月5日 查阅)
n8n.io(@n8n_io)2026 年 8 月 21 日在 X 上的帖子:一条命令自托管 n8n,自带 AI Assistant,用的是 n8n 的 curl 一行命令。不用 Compose 文件,不用环境变量。填上模型密钥,就能用大白话搭工作流。已经在自托管了?同一条命令,加上 --upgrade。
n8n.io 在 X 上,2026 年 8 月 21 日
n8n.io(@n8n_io)2026 年 10 月 28 日在 X 上宣布 n8n 3.0 进入 beta:没有一堆亮眼的新功能,而是更好的可靠性、稳定性和安全性,再加上过去一年攒下的所有破坏性变更,放进一个大版本。稳定版 12 月初推出。
n8n.io 在 X 上,2026 年 10 月 28 日

X 官方嵌入卡片的截图,拍摄于 2026 年 11 月 5 日,时间为 UTC。点击截图可到 X 上打开原帖。

常见错误

  • 运行时没挂卷。没有 -v n8n_data:/home/node/.n8n,你的工作流和凭据就跟着容器一起消失。
  • 变量名拼错。正确的名字是 N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS,n8n 的页面还特意说明,不是 N8N_ENFORCE_SETTINGS_PERMISSIONS。
  • 为了重启而在 docker compose down 后面加 -v。这个参数会删除 n8n 的全部数据,n8n 只在卸载那一步列出它。
  • 换成 Postgres,还指望工作流跟过去。已有的 SQLite 数据不会迁移。n8n_data 也要继续挂载,因为这个文件夹里仍然有加密密钥、日志和源代码管理的资源。
  • 开放了 n8n 自己那个端口以外的端口。Compose 里的沙盒运行器是特权容器,n8n 说它实际上等同于宿主机的 root。
  • 在 PowerShell 里运行一行命令脚本,或者把 Compose 项目放在 WSL 的 /mnt/c 下。要用 WSL,并把项目放在它自己的文件系统里。

自己试一试

  • 带上你的时区启动 n8n,重建第 1 课里的定时任务,确认 8 点真的是你这边的 8 点。
  • 停掉容器再重新创建,确认你的工作流还在。
  • 在容器里运行备份指南里的导出命令,再把结果复制到宿主机上。
  • 重建第 2 课里的 Webhook,对比编辑器显示的网址和你实际使用的地址。
  • 打开一行命令脚本写出的 compose.yml,找到里面的卷和端口。

接下来学什么

到这里,你有了一个在运行的 n8n、第一个工作流、一个 Webhook 和一个智能体。下一门课是 n8n 进阶课,从错误工作流学起。Error Trigger、重试和 Stop And Error,能让自己运行的工作流出了错,不至于没人发现。接着这门课还会讲子工作流、Code 节点,以及用队列模式来扩展。想先给新服务器找点事做,可以从 Mindket 的 n8n 工作流里导入一个 n8n 工作流,在你自己的编辑器里打开它。

自测一下

  1. 你用 docker run 运行 n8n,之后又重新创建了容器。数据必须放在哪里才能保住?

    查看答案

    B. 挂载在 /home/node/.n8n 的卷 --rm 会在容器停止时把容器删掉,所以工作流和凭据必须放在挂载于 /home/node/.n8n 的卷里。

  2. 要让基于时间的节点在你自己的早上 8 点触发,该设置哪个变量?

    查看答案

    D. GENERIC_TIMEZONE GENERIC_TIMEZONE 设置 Schedule Trigger 这类节点使用的时区,文档里还要同时给容器设置 TZ。

  3. 为什么安装当天就要复制 config 文件,或者设置你自己的 N8N_ENCRYPTION_KEY?

    查看答案

    A. 没有对应的密钥,恢复出来的数据库或导出文件都解不开 config 文件里存着加密凭据的密钥,等到磁盘坏了,就没有东西可存了。

  4. 你只想重启一个 Compose 项目,哪条命令却会删掉你全部的 n8n 数据?

    查看答案

    C. docker compose down -v -v 参数会删除数据卷,n8n 只在卸载那一步列出它。

常见问题

n8n 用的是哪个 Docker 镜像?

n8nio/n8n。README 里写的是 docker.n8n.io/n8nio/n8n,Compose 文件拉取的是 docker.io/n8nio/n8n,版本取自 .env。还有一个 next 标签,对应不稳定的构建,两种快速入门都在 README 里。

怎么确认 n8n 已经在运行?

在 Compose 的部署里,运行 docker compose ps,等到 sandbox-api 显示 healthy。然后运行 curl -sf http://localhost:5678/healthz,或者在浏览器里打开 http://localhost:5678,Compose 指南就是这么验证的。

自托管的 n8n 需要单独的数据库吗?

不需要。它自带 SQLite,起步够用。n8n 建议团队和生产环境用 Postgres,以后再换,旧的 SQLite 数据是留在原处的。

一行命令安装里多出来的那些容器是什么?

除了 n8n,这套服务还会启动一个代码沙盒、一个运行 Code 节点任务的运行器和一个搜索工具。它们为 n8n Assistant 服务,在你填入 AI 服务商的密钥之前,Assistant 保持关闭。沙盒运行器是特权容器,千万不要公开它的端口。

能用 Podman 或 Colima 代替 Docker 吗?

可以,只要是兼容 Docker 的引擎。一行命令安装的页面说,要安装带 compose 插件的 docker CLI,再把 DOCKER_HOST 设成该引擎的套接字。

自托管的 n8n 免费吗?

社区版免费,功能几乎齐全。注册它同样免费,会增加文件夹、debug in editor 和自定义执行数据。Business 和 Enterprise 要付费,这是 n8n 对比页面上写的。

不用 Docker 的话,n8n 的文件放在哪里?

默认放在 ~/.n8n。如果你设置了 N8N_USER_FOLDER,n8n 就用那个路径下的 .n8n 子文件夹。已有的 npm 安装能继续用,这个文件夹里的 config 文件和 SQLite 数据库,和 Docker 卷里的是同一类东西。

资料来源

  1. n8n Docs: Install options (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/install-options
  2. n8n Docs: Install with Docker (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/install-options/install-with-docker
  3. n8n Docs: Install using Docker Compose (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/install-options/install-using-docker-compose
  4. n8n Docs: One-line setup (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/install-options/one-line-setup
  5. n8n Docs: Update n8n (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/keep-n8n-running/update-n8n
  6. n8n Docs: Back up and restore (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/keep-n8n-running/backup-and-restore
  7. n8n Docs: Endpoints environment variables (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/configure-n8n/basic-configuration/use-environment-variables/endpoints
  8. n8n Docs: Configure webhook URLs with a reverse proxy (2026年11月4日 查阅)https://docs.n8n.io/deploy/host-n8n/configure-n8n/basic-configuration/configuration-examples/configure-webhook-urls-with-reverse-proxy
  9. n8n Docs: Choose how to use n8n (2026年11月4日 查阅)https://docs.n8n.io/choose-how-to-use-n8n
  10. GitHub: n8n-io/n8n (2026年11月4日 查阅)https://github.com/n8n-io/n8n
  11. GitHub: n8n-io/n8n get-n8n-compose.yml (2026年11月4日 查阅)https://raw.githubusercontent.com/n8n-io/n8n/master/docker/get-n8n-compose.yml
  12. n8n Docs: Release notes (2026年11月5日 查阅)https://docs.n8n.io/changelog/release-notes
  13. n8n Blog: Introducing n8n 3.0 (2026年11月5日 查阅)https://blog.n8n.io/introducing-n8n-v3/
  14. n8n.io on X: one command to self-host n8n, 21 August 2026 (2026年11月5日 查阅)https://x.com/n8n_io/status/2090756675472949712
  15. n8n.io on X: n8n 3.0 is now in beta, 28 October 2026 (2026年11月5日 查阅)https://x.com/n8n_io/status/2115459582042534340

分享本节课

继续学习:下一门课

工作流迟早会出错。n8n 进阶课从一个能在出错时通知你的错误工作流学起。

打开错误处理这一课

本节课的 Markdown 版本 · n8n 入门课:面向新手的免费教程 · 全部课程