Skip to content

self-hosted local registry deployments can succeed without pushing the image, leading to No such image at runtime #3257

@flowq-C

Description

@flowq-C

Summary

On self-hosted local builds targeting a local registry like localhost:5000, deployments can be marked as successful while the runner later fails with No such image, because the built image was never pushed to the registry.

Environment

  • Trigger.dev self-hosted
  • Version: v4.4.3
  • Local build flow
  • Local registry image tags like localhost:5000/...

Expected behavior

If self-hosted local builds use a local registry image tag such as localhost:5000/..., the built image should still be pushed so supervisors/runners can pull it.

Actual behavior

The deployment can complete successfully, but the supervisor later fails to pull the image:

No such image: localhost:5000/...

In our case, older image tags existed, but the new deployment tag did not exist after a successful deploy.

Reproduction

  1. Use self-hosted Trigger.dev v4.4.3 with a local registry tag like localhost:5000/...
  2. Perform a local deploy
  3. Deployment reports success
  4. Trigger a run
  5. Supervisor attempts to pull the deployment image and fails with 404 / no such image

What we found

In the local build code path, shouldPush() returns false by default for image tags starting with:

  • localhost
  • 127.0.0.1
  • 0.0.0.0

That seems wrong for self-hosted local-registry setups, because the built image then never reaches the registry that supervisors/runners are expected to use.

Evidence

Relevant logic in buildImage.ts:

case undefined: {
  return imageTag.startsWith("localhost") ||
    imageTag.startsWith("127.0.0.1") ||
    imageTag.startsWith("0.0.0.0")
    ? false
    : true;
}

Observed runtime failure:

  • deployment marked successful
  • supervisor log: No such image: localhost:5000/...
  • previous tags existed, new tag for the new deployment did not

Impact

Self-hosted local-registry deployments can appear successful but fail at runtime when the runner tries to pull the image.

Question

Should local-registry targets in self-hosted mode default to push=true, or is there another supported path that supervisors are expected to use here?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions