数据卷不是文件夹:你敢重装 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。你会第一次真正看懂:为什么一份配置文件,可以把一套应用完整地搭起来。