n8n 如何构建自定义 Docker 镜像(pnpm build:docker 与 build:deploy)

发布时间:2026/11/4 13:08:15

n8n 如何构建自定义 Docker 镜像(pnpm build:docker 与 build:deploy) n8n 如何构建自定义 Docker 镜像pnpm build:docker 与 build:deploy【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400 integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n这篇文章解决一个问题你改了 n8n 源码或想基于自己的分支构建需要把改动打进一个可以在本地运行、或在 Testcontainers 等环境中使用的自定义 Docker 镜像。自 1.101.0 起n8n 的 Docker 镜像构建要求先有一个预编译的 n8n 应用仓库为此提供了两个入口脚本pnpm build:deploy只产出编译结果和pnpm build:docker编译 构建镜像一步完成。本文基于仓库内 docker/images/n8n/README.md 的 Build Docker Image 章节、根目录 package.json 的脚本定义、scripts/build-n8n.mjs 与 scripts/dockerize-n8n.mjs 的源码整理。前置条件按 package.json 中engines与packageManager字段构建机需要Node.js24.0.0pnpm11.25.0仓库锁定pnpm11.25.0Docker带docker buildx bake支持或 podman。scripts/dockerize-n8n.mjs 的逻辑是优先使用docker buildx bake当 bake 不可用且未强制指定引擎时回退到 podman两者都没有则直接报错退出。注意一个关键约束docker/images/n8n/Dockerfile 通过COPY ./compiled /usr/local/lib/node_modules/n8n把编译产物打进镜像也就是说构建上下文里必须存在compiled目录这个目录只能由pnpm build:deploy即scripts/build-n8n.mjs生成。如果跳过编译直接跑镜像构建scripts/dockerize-n8n.mjs 的checkPrerequisites会检测不到compiled目录并提示Please run build-n8n.mjs first!。主路径一条命令完成编译与镜像构建在仓库根目录执行pnpm build:docker按 package.json 中的定义该脚本等价于node scripts/build-n8n.mjs node scripts/dockerize-n8n.mjsCONTRIBUTING.md 中 Run local instances in different configurations 一节也是同样的用法想从自己的分支构建镜像时在根目录运行pnpm build:docker。这条命令分两个阶段。第一阶段build-n8n.mjs 生成编译产物scripts/build-n8n.mjs 依次做这些事清理旧输出删除上一轮的compiled/n8n 应用与dist/task-runner-javascript/JavaScript task runner目录。这是本脚本的第一类副作用会删除这两个构建输出目录。安装依赖并构建全部包在仓库根目录执行pnpm install --frozen-lockfile然后pnpm build --summarize。生成精简的生产部署以NODE_ENVproduction DOCKER_BUILDtrue pnpm --filtern8n --prod --legacy deploy --no-optional ./compiled把生产闭包部署到compiled/过程中会临时裁剪各包的package.json前端依赖裁剪脚本在成功或失败路径上都会从备份恢复这些文件。部署 task runner 闭包用同样的方式把n8n/task-runner部署到dist/task-runner-javascript/。校验与清单验证裁剪没有误删运行时资产skills、knowledge-base、node-definitions 等检查依赖单实例完整性并向两个输出目录各写一份build-manifest.json。脚本结束时会打印 BUILD SUMMARY包含n8n:与task-runner-javascript:两个输出目录的路径与大小。看到✅ n8n built successfully!说明编译阶段完成。如果设置了N8N_GENERATE_LICENSEStrue还会额外生成 SBOM 和THIRD_PARTY_LICENSES.md该步骤默认跳过属于发布流程可选项。第二阶段dockerize-n8n.mjs 构建镜像scripts/dockerize-n8n.mjs 读取 docker/docker-bake.hcl 作为构建计划CI 使用同一文件默认构建n8n与runners两个目标产出n8nio/n8n:localn8nio/runners:local镜像名与标签可通过环境变量定制脚本头部注释列出了完整清单常用的有环境变量默认值用途IMAGE_BASE_NAMEn8nio/n8nn8n 镜像名IMAGE_TAGlocaln8n 镜像标签RUNNERS_IMAGE_BASE_NAMEn8nio/runnersrunners 镜像名NODE_VERSION/BUILDER_IMAGE/RUNTIME_IMAGE由 docker/docker-bake.hcl 提供默认值基础镜像相关参数直接传给 bakeDOCKER_PLATFORM按本机架构推导linux/amd64或linux/arm64指定目标平台做跨平台构建DOCKER_BUILD_NO_CACHE未设置置为true时加--no-cacheDOCKER_BUILD_BASE_IMAGE未设置置为true时同时构建n8nio/base基础镜像目标DOCKER_BUILD_DISTROLESS未设置置为true时追加构建 distroless 版 runners 镜像CONTAINER_ENGINE未设置强制使用docker或podman两点需要注意当IMAGE_BASE_NAME带 registry 主机即直接推送远程仓库时脚本会直接--push并且要求RUNNERS_IMAGE_BASE_NAME也必须带 registry 主机否则脚本报错退出避免 runners 镜像被推到非预期的仓库。podman 回退路径不支持DOCKER_BUILD_BASE_IMAGE、DOCKER_BUILD_PC、DOCKER_BUILD_TARBALL_DIR设置这些变量走 podman 时会直接报错。替代路径只编译镜像交给别的构建系统如果你的构建流水线用自己的构建器例如独立的 CI 镜像任务不想用dockerize-n8n.mjsdocker/images/n8n/README.md 给出的做法是pnpm run build:deploy即只执行 package.json 中build:deploy对应的node scripts/build-n8n.mjs生成compiled/目录后确保你的构建器上下文包含这个compiled目录。此时可以像 docker/docker-bake.hcl 的n8n目标那样直接构建 docker/images/n8n/Dockerfiledocker build -t n8nio/n8n:local -f docker/images/n8n/Dockerfile .该 Dockerfile 除了拷入./compiled还会在独立的 native-builder 阶段对sqlite3、isolated-vm和confluentinc/kafka-javascript做node-gyp rebuild编译镜像基础运行时不含编译器所以构建时长应包含这部分原生编译。最终镜像EXPOSE 5678/tcp入口是/docker-entrypoint.sh。验证结果构建阶段build-n8n.mjs结束时输出 BUILD SUMMARYDirectory:指向compiled以及build-manifest.json路径。若构建失败脚本报 BUILD PROCESS FAILED!并以非零码退出。镜像阶段dockerize-n8n.mjs成功时打印DOCKER BUILD COMPLETE横幅并列出每个镜像名与大小例如✅ n8nio/n8n:local (size)。同时会在仓库根目录写入docker-build-manifest.json记录构建时间、目标平台、耗时与镜像列表。容器检查构建后可用docker images n8nio/n8n确认本地镜像存在脚本自身也用docker images name --format {{.Size}}读取大小。可运行性镜像构建成功只说明镜像可生成docker/images/n8n/README.md 中给出的启动方式docker run后访问http://localhost:5678同样适用于本地构建的n8nio/n8n:local镜像。限制与适用边界以上流程针对从源码构建本地镜像。如果你不需要自定义镜像CONTRIBUTING.md 提供了替代做法设置N8N_DOCKER_IMAGEn8nio/n8n:latest直接拉取官方镜像跳过本地构建。docker/docker-bake.hcl 中的n8n-pcpointer-compressed目标仅在DOCKER_BUILD_PCtrue时启用docker/images/n8n/README.md 明确说明-pc标签是 n8n Cloud 内部变体no support or stability guarantees普通使用者应使用常规标签。仓库中的build:docker:coverage、build:docker:scan、build:docker:clean等变体服务于覆盖率测试、镜像扫描与强制全量重建不属于本场景的主路径按需参考 package.json 中的定义即可。【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400 integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/31 14:14:43

全埋点方案落地:从事件协议到数据质量治理的完整实践

做APP数据分析的同事经常说:没有用户行为采集,一切优化都是拍脑袋。但真到自己动手做一套全埋点方案时,你会发现手动埋点的工作量远比你想象的大,漏埋、错埋、重复埋点都是日常。前阵子我把整个方案从技术选型做到事件协议&#x…

2026/10/25 23:56:59

PyCharm 2026安装配置指南:从解释器到虚拟环境一次搞定

如果你翻到这篇文章,多半是刚下载完PyCharm,正卡在安装包解压后的那个蓝色向导界面,或者装完之后打开白屏、新建项目时不知道该选哪一行解释器。这个工具我这些年给团队新手配了不知道多少次环境,说实话,PyCharm安装本…

2026/10/21 15:31:17

AI测试助手实战:系统工程师如何用AI提升效率与质量

这两年做系统工程师和测试相关的活儿,一个非常明显的感受是: AI 测试 已经从“能用但鸡肋”进化到“真能帮你省两三个小时”的阶段了。不管是写自动化脚本、排查 Linux 环境问题,还是解析一堆让人头大的日志,AI 这个“超级助手”…

2026/11/4 19:03:41

车载感知技术的硬实力:红外NETD与多模态边缘融合实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 19:03:41

如何准确定义技术文档中的模糊术语

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 19:03:41

基于ADS122U04IPWR与PIC18F4685的高精度温度采集模块

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 19:03:41

工业级温度测量精度设计:ADS122U04与STM32F723实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 19:03:41

ADS122U04+STM32F100ZE工业测温方案:从信号链到标定

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 18:58:40

YuukiPS Launcher:轻量级动漫游戏运行环境封装方案

1. 项目概述:这不是一个普通的游戏启动器,而是一套面向动漫游戏爱好者的轻量级运行环境封装方案“YuukiPS Launcher游戏启动器”这个名称里藏着三个关键信息点:YuukiPS(品牌/作者标识)、Launcher(核心功能定…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑