Container image base change: symptoms, cause, and the test that catches it

A base image update changes libraries or users and the service fails to start.

Container image base change is documented by 3 accepted public reports from 3 organisations, 2 of them published in the last 5 years.

  • Likelihood: low (2 public reports in 5 years)
  • Impact: medium (3 of 3 reports: availability)

3 public reports · verified 2026-10-22

Symptoms

User-visible

  • CI jobs could not build images and failed with a DNS lookup error against 169.254.169.254:53 reporting no such host.[2]
  • JavaScript runtime variants of some prebuilt CI images failed inside CI jobs.[3]
  • The rebuilt runtime variant images were missing the user account that CI jobs expected.[3]
  • Many of the rebuilt runtime variant images failed to start.[3]
  • Existing containers with mounted volumes entered a boot loop after the image moved to a newer distribution base whose default user took the expected user id.[1]

Monitoring-visible

  • The runner queue SLI error rate for the hosted CI runners breached its SLO.[2]
  • Failing jobs shared the 24.0.7 or latest tag of the container-in-container image.[2]

Root causes

  1. stage: third-party The 24.0.7 release of the container-in-container image updated its base image. The new base moved the packet filter backend from the legacy backend at 1.8.9 to nf_tables at 1.8.10.[2]
  2. stage: infra The hosted runner infrastructure did not support nf_tables, so the 24.0.7 image failed to start there.[2]
  3. stage: third-party The upstream official JavaScript runtime image moved one of its tags from an older to a newer major release of its Linux distribution base.[3]
  4. stage: build The image build automation removed the upstream build file's FROM statement by pattern matching and appended the rest to its own build files. After the base change the pattern no longer matched, and multi-stage build support let the image build with an extra FROM statement.[3]

Public examples

  1. [1]Crafty Controller, 2025-01-20. Crafty Controller changed its Docker base image from ubuntu:22.04 to ubuntu:24.04 in release 4.4.5; the new image ships a default ubuntu user with UID 1000 that conflicted with the project's own non-root user, so existing containers with mounted volumes lost file access and entered a boot loop in versions 4.4.5 and 4.4.6 until 4.4.7 removed the shipped user. primary Docker Image 24.04 rebase - non-root user issue. (#521)
  2. [2]GitLab, 2023-12-15. The docker 24.0.7 image release updated its alpine base, which switched iptables to nf_tables; GitLab's SaaS runner infrastructure did not support nf_tables, so docker:24.0.7-dind failed to start and CI jobs could not build images until the upstream image was fixed. primary 2023-12-15: docker:24.0.7-dind failing to start on GitLab Runner (saas)
  3. [3]CircleCI, 2018-12-08. Docker moved the official Node images' carbon tag from a Debian Jessie base to a Debian Stretch base, CircleCI's image build automation then left an extra FROM statement in Node variants of its convenience images, and the rebuilt images were missing the circleci user and many failed to start in CircleCI jobs. primary Convenience Images Update: 2018.11.27 Node variants incident

Test classes that catch it

Test classStageLimitationBasis
Integration testspre-deployA job that starts the new container-in-container image on a host with nf_tables support passes, because the image failed only on hosted runner infrastructure without that support.by design analysis
Configuration and environment testspre-deployA check that the rebuilt image contains the expected user account catches the missing user, but it does not compare the image's packet filter backend with what the host kernel supports.by design analysis
Canary and progressive delivery checkspost-deployA canary needs a staged rollout, and jobs that pulled the upstream 24.0.7 or latest tag received the new base directly with no rollout to stage.by design analysis

Risk

  • Likelihood: low (2 public reports in 5 years)
  • Impact: medium (3 of 3 reports: availability)
Counts behind the grades
Accepted public reports3
Published in the last 5 years2
Impact stated: availability3

How the grades are computed

Pre-release checklist

  • PR-01
  • PR-02
  • PR-03
  • PR-04
  • PR-05
  • PR-06
  • PR-07

First 30 minutes

  • FM-01
  • FM-02
  • FM-03
  • FM-04
  • FM-05
  • FM-06
  • FM-07

Download the checklist

What catches this: catalogue entries

Listed because their own documentation or site names integration tests, configuration and environment tests, canary and progressive delivery checks on the verification date. Alphabetical. Not a recommendation.

Tools whose documentation names these test classes

Providers whose site names these test classes

Only on this page

Container image base change starts in the third-party stage in report [2] and in the build stage in report [3], not in the config stage. In report [2] and report [3], the trigger was an upstream base image update that the affected team did not release. In report [2], the new base of the container-in-container image moved the packet filter backend to nf_tables. In report [3], an official runtime image tag moved to a newer distribution base.

In report [2], the fault sat between the image and the host: the hosted runners did not support nf_tables, and the upstream fix falls back to the legacy backend when nf_tables is not available. In report [3], the base change broke the pattern match that removed the upstream FROM statement, and the follow-ups name pre-deployment testing of images and image building logic that is less sensitive to upstream changes.

Questions

What causes container image base change?

In report [2], a new image base moved the packet filter backend to nf_tables, which the hosted runners did not support. In report [3], an upstream base change broke the build automation's FROM statement removal. In report [1], the new base image shipped a default user that took the user id the project's own non-root user expected.

What are the symptoms of container image base change?

CI jobs could not build images and failed with a DNS lookup error reporting no such host [2]. Rebuilt runtime variant images lacked the expected user account and many failed to start [3].

Why did tests not catch container image base change?

In report [2], the fault appeared only on hosted runner infrastructure without nf_tables support. Report [3] lists pre-deployment testing of images as a follow-up. In report [1], local tests on fresh containers had passed, but containers with existing mounted volumes failed.

Which test class catches container image base change, and what does it miss?

Integration tests, configuration and environment tests and canary checks are listed, all with the by-design label. A canary cannot stage an upstream tag that jobs pull directly.

Which public reports document container image base change?

Three primary reports from three organisations document it, published on 2018-12-08 [3], 2023-12-15 [2] and 2025-01-20 [1]. All three classify the impact as availability.

Should a team roll back or fix forward when container image base change happens?

Report [2] advised customers to pin the image to 24.0.6 until the upstream image shipped a fix. Report [3] patched most affected variants on 28 November and the rest on 29 November.

Release Incident Playbook (2026). Container image base change: symptoms, cause, and the test that catches it, content version 1.0.0. https://releasefailures.com/incidents/container-image-base-change/. Accessed 2026-10-21.