Skip to content

fix(docker): base runtime images on ubuntu:26.04 - #2380

Merged
avantgardnerio merged 1 commit into
apache:mainfrom
avantgardnerio:brent/docker-ubuntu-2604
Aug 26, 2026
Merged

fix(docker): base runtime images on ubuntu:26.04#2380
avantgardnerio merged 1 commit into
apache:mainfrom
avantgardnerio:brent/docker-ubuntu-2604

Conversation

@avantgardnerio

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

None.

Rationale for this change

dev/docker/*.Dockerfile are not hermetic. The binary is compiled on the host by dev/build-ballista-docker.sh, and each image then does:

COPY target/${RELEASE_FLAG}/ballista-executor /root/ballista-executor

So the host's glibc must be no newer than the base image's. Building on Ubuntu 26.04 (glibc 2.43) against ubuntu:24.04 (glibc 2.39) produces images that fail at the dynamic loader, before main runs:

/root/ballista-executor: /lib/x86_64-linux-gnu/libm.so.6:
    version `GLIBC_2.43' not found (required by /root/ballista-executor)

The scheduler and executor crash-loop immediately, which on a Kubernetes deployment looks like an application fault rather than a build-environment mismatch.

What changes are included in this PR?

Bumps the five runtime images that copy a host-built binary from ubuntu:24.04 to ubuntu:26.04:

  • ballista-scheduler
  • ballista-executor
  • ballista-benchmarks
  • ballista-standalone
  • ballista-cli

chaos.Dockerfile is deliberately not changed: it builds inside rust:1-bookworm and runs on debian:bookworm-slim, so it carries its own toolchain and does not depend on the host's glibc.

Are these changes tested?

Yes. All five images were rebuilt on this base and exercised on a 4-node EKS cluster running h2o benchmarks at 1e9 rows — scheduler and executors registered and ran queries to completion. Each binary was also smoke-tested inside its image before deploy:

$ docker run --rm --entrypoint /root/ballista-executor <image> --version
ballista-executor 54.0.0

Building on an older host (e.g. CI on ubuntu-24.04) is unaffected: an older-glibc binary runs fine on a newer base.

Are there any user-facing changes?

The published images move to an ubuntu:26.04 userland.

One limitation worth stating plainly: this raises the floor rather than making the build hermetic. A host newer than the base image will break again in exactly the same way. The complete fix is to compile inside a container matching the runtime base, at the cost of a separate target directory per image; that seemed like a larger change than this bug warranted, but I'm happy to do it that way instead if maintainers prefer.

These Dockerfiles are not hermetic: the binary is compiled on the host and
each image does `COPY target/${RELEASE_FLAG}/<bin> /root/<bin>`, so the
host's glibc must be no newer than the base image's. Building on Ubuntu
26.04 (glibc 2.43) against `ubuntu:24.04` (2.39) produces images that fail
at the loader before `main` runs:

    /root/ballista-executor: /lib/x86_64-linux-gnu/libm.so.6:
        version `GLIBC_2.43' not found (required by /root/ballista-executor)

This raises the floor rather than making the build hermetic — a host newer
than the base will break again the same way. Building inside a container
matching the base would fix it properly, at the cost of a separate target
dir per image.

`chaos.Dockerfile` is untouched: it builds inside `rust:1-bookworm` and runs
on `debian:bookworm-slim`, so it carries its own toolchain and does not
depend on the host at all.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@avantgardnerio

Copy link
Copy Markdown
Contributor Author

@phillipleblanc FYI

@avantgardnerio
avantgardnerio merged commit 76c4a01 into apache:main Aug 26, 2026
4 checks passed
@avantgardnerio
avantgardnerio deleted the brent/docker-ubuntu-2604 branch August 26, 2026 00:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants