{"record":{"id":"41de383f2f88767f","repo":"hyperledger/fabric","slug":"docker-build-is-disabled","errorCode":null,"errorMessage":"docker build is disabled","messagePattern":"docker build is disabled","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/peer/node/start.go","lineNumber":162,"sourceCode":"\tmdBytes []byte,\n\tcodePackage io.Reader,\n) (container.Instance, error) {\n\ti, err := e.detector.Build(ccid, mdBytes, codePackage)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// ensure <nil> is returned instead of (*externalbuilder.Instance)(nil)\n\tif i == nil {\n\t\treturn nil, nil\n\t}\n\treturn i, err\n}\n\ntype disabledDockerBuilder struct{}\n\nfunc (disabledDockerBuilder) Build(string, *persistence.ChaincodePackageMetadata, io.Reader) (container.Instance, error) {\n\treturn nil, errors.New(\"docker build is disabled\")\n}\n\ntype endorserChannelAdapter struct {\n\tpeer *peer.Peer\n}\n\nfunc (e endorserChannelAdapter) Channel(channelID string) *endorser.Channel {\n\tif peerChannel := e.peer.Channel(channelID); peerChannel != nil {\n\t\treturn &endorser.Channel{\n\t\t\tIdentityDeserializer: peerChannel.MSPManager(),\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype custodianLauncherAdapter struct {\n\tlauncher      chaincode.Launcher","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/peer/node/start.go#L144-L180","documentation":"disabledDockerBuilder is a ccapi build implementation installed when the peer is configured with external builders and Docker builds are disabled. Its Build method unconditionally returns this error, so any attempt to build a chaincode package via the legacy Docker path fails with this message.","triggerScenarios":"Invoking chaincode build/install flow on a peer where CORE_CHAINCODE_EXTERNALBUILDERS / docker build disablement is configured, but the chaincode package is not handled by an external builder, so it falls through to disabledDockerBuilder.Build.","commonSituations":"Operating a locked-down peer with docker builds disabled (e.g. for security) while deploying legacy chaincode that still requires Docker builds; forgetting to package chaincode for external builders; misconfigured external builder paths.","solutions":["Package and deploy the chaincode as an external builder package so the disabled Docker path is never used.","Re-enable Docker builds in peer configuration if legacy Docker chaincode is required.","Verify the external builder definitions match the chaincode package type (type/label in the package metadata)."],"exampleFix":"// before\npeer lifecycle chaincode package cc.tar.gz --path . --lang golang --label cc1  # requires docker build (disabled)\n// after\n# package as CC-type external package\n{ \"path\": \"...\", \"type\": \"cc\" } ; peer lifecycle chaincode package ext.tar.gz --path . --lang binary --label cc1","handlingStrategy":"validation","validationCode":"// before install/instantiate on a docker-build-disabled peer, ensure package is external-builder compatible\nif pkg.Type != \"cc\" { return fmt.Errorf(\"peer has docker builds disabled; use external builder package\") }","typeGuard":null,"tryCatchPattern":"if err := installChaincode(pkg); err != nil && err.Error() == \"docker build is disabled\" {\n    return fmt.Errorf(\"repackage as external builder package or re-enable docker builds: %w\", err)\n}","preventionTips":["On peers with Docker builds disabled, only deploy chaincode handled by external builders.","Verify builder definitions match package type/label before install.","Document the disabled-build posture so operators don't ship legacy Docker chaincode."],"tags":["fabric","chaincode","docker","external-builders"],"backgroundTag":"docker-build-disabled","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}