尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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),仅供参考
返回列表