数据卷不是文件夹:你敢重装 n8n,是因为知道数据不会丢

你可能已经把 n8n 跑起来了。工作流能执行,接口也接好了,甚至已经自动帮你整理表格、发送通知、同步内容。

然后有一天,你看到 Docker Desktop 提示镜像可以更新。你想点击更新,却突然不敢动。

你真正担心的并不是“更新会不会失败”。你担心的是:万一我重装容器,前几天做好的工作流、登录过的账号、保存的凭据,会不会全部没了?

这正是很多人第一次接触 Docker 时最容易踩的坑:他们以为“容器正在运行”,就等于“数据已经安全”。其实不是。

今天这篇文章只解决一件事:让你的 n8n 像住进一间可以随时翻新的房间,但所有重要资料都放在房间外的独立储物柜。

这样以后升级、重启、重建容器时,你不会再因为害怕丢数据而不敢操作。


先给你一个最重要的结论

容器负责运行 n8n;数据卷负责保存 n8n 的资料。容器可以换,数据卷不能乱删。

你可以把 Docker 容器理解成一间租来的房间。

这间房里有桌子、椅子、灯,也就是 n8n 程序本身。房间旧了、装修坏了、想换新版本,最简单的方式不是在旧房间里一直补,而是把这间房拆掉,再按同一套图纸搭一间新的。

问题来了:你放在房间里的文件、证件、钥匙怎么办?

如果它们都留在房间里,房间拆掉时,东西当然也没了。

所以现实生活里,你会把重要资料放进一个独立储物柜。房间可以换,储物柜一直在;新房间建好后,再把这只储物柜接回来就行。

在 Docker 里,这只独立储物柜就叫 volume,也就是数据卷。

你看到的东西 用生活化的话解释 它真正负责什么
容器 Container 你现在正在使用的一间房 运行 n8n 这个程序。
镜像 Image 这间房的标准装修图纸 决定程序和基础环境是什么样。
数据卷 Volume 房间外独立上锁的储物柜 保存工作流、配置和应用数据。
加密密钥 打开储物柜里“机密文件”的主钥匙 让 n8n 能够读回保存过的凭据。

Docker 官方对 volume 的定义很直接:它是由 Docker 管理的持久化数据存储,生命周期独立于容器。也就是说,容器删除后,只要 volume 没删,数据通常仍然在。Docker 官方说明


先别写代码:你到底想保住什么?

如果你只是打开 n8n 看一看,随时可以从头来过,那不一定需要担心数据。

但只要你做过下面任意一件事,就应该使用数据卷:

  • 你已经搭好工作流,不想下次重新连一遍节点。
  • 你在 n8n 里保存过 API Key、账号密码或 OAuth 登录信息。
  • 你希望 Docker 重启后,n8n 仍然是原来的样子。
  • 你准备把 n8n 从一台电脑迁到 NAS 或服务器。

如果你属于其中任何一种,下面的配置不是“可选优化”,而是应该从一开始就写好的基础配置。


你只需要看懂这一行

在 compose.yaml 中,找到 n8n 服务,然后加上:

volumes:
  - n8n_data:/home/node/.n8n

第一次看这行很容易紧张。其实它只有一句人话:

把叫作 n8n_data 的独立储物柜,接到 n8n 房间里保存资料的位置。

左边和右边分别是什么?

n8n_data:/home/node/.n8n
位置 它是什么 你可以怎样理解
左边 n8n_data 数据卷的名字 储物柜的编号。你给它起什么名字都可以,但最好一眼能看懂。
右边 /home/node/.n8n n8n 在容器中的数据目录 n8n 房间里那个专门放资料的柜子位置。

你不需要记住右边这串路径从哪来。对 n8n 来说,/home/node/.n8n 是它保存重要资料的常用位置;你现在做的不是修改 n8n,而是告诉 Docker:这个位置的资料不要只放在临时房间里,要同步放进独立储物柜。


跟着做:用最稳妥的方式给 n8n 加上数据卷

下面的步骤请慢一点做。每完成一步,你都知道自己在保护什么。

第 1 步:找到你的 n8n 文件夹

找到之前放 compose.yaml 的目录。它可能在桌面、文稿、NAS 的某个应用目录,或者你自己创建的 n8n 文件夹中。

如果你现在还没有 compose.yaml,可以新建一个文件夹,例如:

n8n-docker

后面的文件都放进这里。把它想成“这栋 n8n 小楼的物业办公室”。

第 2 步:创建或打开 compose.yaml

把下面这段完整配置复制进去。先不要急着改每一行,后面会逐行解释。

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

你会发现,最下面还有两行:

volumes:
  n8n_data:

它们的意思是:物业系统,请为我登记一只叫 n8n_data 的独立储物柜。

上面那一段是“房间里要接这只柜子”,最下面这一段是“这只柜子本身要存在”。两部分都要有。

第 3 步:再创建一个 .env 文件

在同一个文件夹中创建一个名为 .env 的文件。注意:它前面有一个英文句点,而且没有 .txt 后缀。

写入:

N8N_ENCRYPTION_KEY=请替换成你自己生成的一长串随机字符

这串 N8N_ENCRYPTION_KEY 不要随便复制教程里的示例,也不要每次重装时换一个新的。

把它想成储物柜中“加密文件的主钥匙”。你的 n8n 数据卷可能还在,但如果主钥匙换了,之前保存的一些机密凭据就可能无法正确读取。

你可以先用密码管理器生成一串较长的随机字符,然后保存到安全的地方。不要把真实密钥截图、发到群里,或提交到公开 GitHub。

第 4 步:启动 n8n

在这个文件夹中打开终端,输入:

docker compose up -d

这句话的意思是:

请物业根据配置册,把这间 n8n 房间和它的独立储物柜一起准备好,并在后台运行。

第一次启动时,Docker 会自动创建 n8n_data 数据卷。你不需要手动去电脑某个隐藏目录里建文件夹。

第 5 步:确认储物柜真的已经接上

输入:

docker volume ls

你会看到一个名字中带有 n8n_data 的数据卷。Compose 有时会在前面加上项目文件夹名,这是正常的。

再输入:

docker compose ps

如果 n8n 状态是 running 或 Up,就可以在浏览器打开:

http://localhost:5678

此时请创建一个名字很容易辨认的测试工作流 ,例如:

数据卷测试,请不要删除

它不是无意义的测试。下一步我们会用它验证:房间换了,资料是否还在。


最关键的一次验证:不是看它能不能启动,而是看它能不能回来

很多人部署完就停在“能打开网页”这一步。但真正让你放心的,是确认数据可以跟着储物柜回来。

在测试环境中,执行:

docker compose down

这会停止并移除当前容器。先别紧张:你没有写 -v,所以数据卷不会被删除。

然后再执行:

docker compose up -d

再次打开 n8n。如果刚才创建的“数据卷测试,请不要删除”工作流还在,说明你已经成功完成了最重要的一件事:容器可以重建,但数据没有跟着容器一起消失。

这就是以后更新镜像、迁移环境、修复容器时,你敢动手的底气。


这几个词看起来像技术,其实都很好理解

restart: unless-stopped 是什么?

它像物业恢复供电后,会重新打开原本还在营业的店铺。

当电脑或 Docker Desktop 重启时,Docker 会尝试再次启动 n8n;但如果你曾经手动把 n8n 停掉,它会尊重你的决定,不会强行把它再次打开。

它不能解决所有故障,但能避免“电脑重启一次,n8n 就忘记启动”这种低级麻烦。

为什么建议先写 127.0.0.1:5678:5678?

它表示 n8n 先只允许当前这台电脑访问。

你可以把它理解为:大楼门牌只对自己家的门铃生效,局域网里其他设备暂时按不到。对于刚开始学习的人,这是一种更稳妥的默认设置。

等你未来需要从外网访问 n8n,再单独学习域名、HTTPS、反向代理和登录保护。不要为了“先能访问”就直接把管理后台暴露到公网。


你最容易犯的 4 个错误,我提前替你避开

错误一:只写了上面的挂载,没有写最下面的 volumes

你可能写了:

volumes:
  - n8n_data:/home/node/.n8n

却忘了最末尾:

volumes:
  n8n_data:

这就像你告诉搬运工“把东西放进 12 号储物柜”,却没有让物业登记 12 号柜。Compose 往往会直接报错,或者配置无法通过检查。

错误二:执行了 docker compose down -v

普通的:

docker compose down

相当于把房间暂时拆掉,但储物柜还在。

而带 -v 的:

docker compose down -v

相当于拆房时连储物柜一起清空。

除非你明确要从零开始测试,否则不要把 -v 当作常规关闭命令。

错误三:重建后 n8n 能打开,但以前的凭据提示异常

先检查 .env 中的 N8N_ENCRYPTION_KEY 是否和以前相同。

这不是“数据卷失效”,更像是你仍然拿着同一个储物柜,却换掉了机密文件的钥匙。工作流可能还在,但涉及加密凭据的内容会受到影响。

错误四:我在电脑上找不到 volume 文件夹,是不是它没保存?

不一定。Named volume 是 Docker 管理的储物柜,不建议新手直接进入 Docker 的内部目录修改文件。你应该通过下面的命令确认它存在:

docker volume ls

如果想查看某个 volume 的详细信息:

docker volume inspect 数据卷名称

先让 Docker 管理它,比你直接在隐藏目录中翻找更安全、更不容易误删。


你现在已经拿到的,不只是一个配置

很多教程会把 volumes 当成 YAML 里一个小小的字段。但对真正开始使用 n8n 的人来说,它决定的是:你以后敢不敢升级、敢不敢迁移、敢不敢修复故障。

现在请你记住这句话:

程序住在容器里,成果住在数据卷里。

只要这个边界清楚,Docker 就不再是“删了就怕全没”的黑箱,而会成为一种你可以安心管理的工具。

下一篇我们会把 n8n、数据库、端口、网络和数据卷全部写进同一份 compose.yaml。你会第一次真正看懂:为什么一份配置文件,可以把一套应用完整地搭起来。