{"record":{"id":"714eb191114efe9c","repo":"apache/beam","slug":"failed-to-build-sdk-container-with-local-docker-stderr-s","errorCode":null,"errorMessage":"Failed to build sdk container with local docker, stderr:\n %s.","messagePattern":"Failed to build sdk container with local docker, stderr:\n (.+?)\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/portability/sdk_container_builder.py","lineNumber":173,"sourceCode":"    return available_builders[0]\n\n\nclass _SdkContainerImageLocalBuilder(SdkContainerImageBuilder):\n  \"\"\"SdkContainerLocalBuilder builds the sdk container image with local\n  docker.\"\"\"\n  @classmethod\n  def _builder_key(cls):\n    return 'local_docker'\n\n  def _invoke_docker_build_and_push(self, container_image_name):\n    try:\n      _LOGGER.info(\"Building sdk container, this may take a few minutes...\")\n      now = time.time()\n      subprocess.run(['docker', 'build', '.', '-t', container_image_name],\n                     check=True,\n                     cwd=self._temp_src_dir)\n    except subprocess.CalledProcessError as err:\n      raise RuntimeError(\n          'Failed to build sdk container with local docker, '\n          'stderr:\\n %s.' % err.stderr)\n    else:\n      _LOGGER.info(\n          \"Successfully built %s in %.2f seconds\" %\n          (container_image_name, time.time() - now))\n\n    if self._docker_registry_push_url:\n      _LOGGER.info(\"Pushing prebuilt sdk container...\")\n      try:\n        subprocess.run(['docker', 'push', container_image_name], check=True)\n      except subprocess.CalledProcessError as err:\n        raise RuntimeError(\n            'Failed to push prebuilt sdk container %s, stderr: \\n%s' %\n            (container_image_name, err.stderr))\n      _LOGGER.info(\n          \"Successfully pushed %s in %.2f seconds\" %\n          (container_image_name, time.time() - now))","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/portability/sdk_container_builder.py#L155-L191","documentation":"The local Docker container builder runs 'docker build . -t <image>' in a temp source dir. When docker exits nonzero (CalledProcessError), the build failed and RuntimeError wraps the captured stderr from the docker build process.","triggerScenarios":"_SdkContainerImageLocalBuilder._invoke_docker_build_and_push invokes 'docker build' with check=True and the docker daemon/tool fails (Dockerfile error, base image pull failure, daemon not running).","commonSituations":"Docker daemon not running/permissions (user not in docker group); base image unavailable or rate-limited on Docker Hub; Dockerfile build steps failing (pip install errors, missing files); disk space exhaustion.","solutions":["Read the stderr in the message to find the failing Dockerfile step","Verify docker works: run 'docker info' and fix daemon/permission issues","Fix the failing build step (dependency install errors, missing context files)","Check disk space and Docker Hub pull limits; retry after resolving"],"exampleFix":"// before\nsubprocess.run(['docker', 'build', '.', '-t', image], check=True)  # fails silently in CI\n// after\n# ensure daemon reachable, then pin base image and fix step:\nFROM python:3.11-slim@sha256:<digest>  # avoids rate limit / tag drift","handlingStrategy":"validation","validationCode":"import subprocess\nassert subprocess.run(['docker', 'info'], capture_output=True).returncode == 0, 'docker daemon not reachable; start Docker or fix permissions'","typeGuard":"def docker_ready() -> bool:\n    import subprocess\n    return subprocess.run(['docker', 'info'], capture_output=True).returncode == 0","tryCatchPattern":"try:\n    builder.build_container_image(...)\nexcept RuntimeError as e:\n    if 'Failed to build sdk container with local docker' in str(e):\n        logger.error('Docker build failed:\\n%s', e)\n        raise SystemExit(4)","preventionTips":["Verify 'docker info' works as the invoking user before kicking off builds","Pin base image tags/digests to avoid pull failures and rate limits","Keep free disk headroom; prune stale images regularly","Test the Dockerfile build locally before wiring it into the pipeline flow"],"tags":["apache-beam","docker","container-build","subprocess"],"backgroundTag":"docker-build-failed","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}