Linux & OS Intermediate

Resolving ‘apt-get update Hash Sum Mismatch’ in Ubuntu Docker Containers on Alpine Linux Hosts

Fix 'Hash Sum mismatch' errors during `apt-get update` in Ubuntu Docker containers often seen on Alpine Linux hosts. Learn to clear caches, manage proxies, and ensure repository integrity for robust builds.

👨‍💻
Senior Systems Architect • Verified in Staging Labs

Fix 'Hash Sum mismatch' errors during `apt-get update` in Ubuntu Docker containers often seen on Alpine Linux hosts. Learn to clear caches, manage proxies, and ensure repository integrity for robust builds.

As a seasoned SysAdmin and DevOps engineer, I've seen my fair share of cryptic errors that halt deployments and frustrate developers. The "Hash Sum mismatch" error during an apt-get update is one such common culprit, particularly when running Ubuntu-based Docker containers on an Alpine Linux host system. This guide will clarify why this happens and provide highly effective, step-by-step solutions to get your builds and updates running smoothly again.

It's important to clarify upfront: apt-get is the package manager for Debian/Ubuntu-based systems. Alpine Linux, on the other hand, uses apk. If you're seeing apt-get errors, it means you're running a Debian/Ubuntu environment, most commonly inside a Docker container, while your host system is Alpine Linux. This guide assumes that common scenario.

Symptom & Error Signature

You're likely trying to run apt-get update inside an Ubuntu Docker container (either interactively or as part of a Dockerfile build), and instead of a clean update, you're greeted with output similar to this:

Err:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
  Hash Sum mismatch
  Hashes of expected file:
   - Filesize: 1391696 [weak]
   - SHA256: 423d242270921470404a3778a3c82e6669919f20d75b36a536f86b1f23c72b53
   - MD5Sum: ef29a656621375d06b8f3a3f57271810 [weak]
  Hashes of received file:
   - SHA256: 2320743f1dd14197c36a6e5b88135e5a7d65691e813a85493213cf8e3e4dfae1
   - MD5Sum: 028d7a31b2c451b689163f538e4a9e14 [weak]
  Last-Update: Tue, 03 Nov 2026 10:00:00 UTC
Fetched 1391 kB in 0s (14.2 MB/s)
E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/binary-amd64/Packages.gz  Hash Sum mismatch
E: Some index files failed to download. They have been ignored, or old ones used instead.

The key phrase here is Hash Sum mismatch. This indicates that apt downloaded a file (an index file, a package, etc.) from a repository, but its calculated checksum (SHA256, MD5Sum) does not match the checksum that the repository metadata declared it should have.

Root Cause Analysis

Understanding the root causes is crucial for effective troubleshooting:

  1. Network Intermittency or Corruption: The most straightforward cause. Data could have been corrupted during transit due to a flaky network connection, faulty hardware (rare), or overloaded network infrastructure between your container and the APT repository server.
  2. Intermediate Proxy/CDN Caching Issues: This is often the prime suspect in corporate environments or specific hosting setups. If you're behind a corporate proxy, an ISP proxy, a local caching proxy (like Squid), or even Docker's own build cache, these proxies might be serving stale or incorrect versions of the repository index files. The upstream repository updates, but the proxy serves an older version, leading to a mismatch when apt tries to verify.
  3. Docker Layer Caching: During multi-stage Docker builds, an earlier RUN apt-get update command's layer might be cached. If the repository updates between builds, a subsequent RUN apt-get install command in a later layer might fetch packages based on the new repository state, but the previous apt-get update layer used old index files. This leads to a Hash Sum mismatch.
  4. Repository Server Issues: (Less common but possible) The upstream repository itself could temporarily be inconsistent, serving incorrect files or checksums, or a mirror could be out of sync.
  5. DNS Resolution Problems: Incorrect DNS resolution could cause your container to connect to a geographically distant or outdated mirror, leading to synchronization issues.

Step-by-Step Resolution

Here's how to tackle the Hash Sum mismatch error, starting with the most common and effective solutions.

1. Clear apt Cache and Update in Docker Container

This is the first and most common fix. Stale apt index files are a frequent cause of this error.

# If running interactively inside a container:
docker exec -it <container_id_or_name> bash

# Inside the container, or as a RUN command in Dockerfile:
rm -rf /var/lib/apt/lists/*
apt-get clean
apt-get update

The rm -rf /var/lib/apt/lists/* command forces apt to re-download all package index files from scratch. apt-get clean clears out the local repository of retrieved package files. Always run apt-get update immediately after these commands.

2. Disable APT Caching During Docker Builds

To prevent issues with intermediate proxies or Docker's build cache serving stale data, you can instruct apt to bypass local caching and always fetch fresh data. This is especially useful in Dockerfile builds.

# Add these lines early in your Dockerfile, before apt-get update
RUN echo 'Acquire::http::Cache-Control "no-cache";' > /etc/apt/apt.conf.d/no-cache
RUN echo 'Acquire::http::If-Modified-Since "false";' >> /etc/apt/apt.conf.d/no-cache

RUN apt-get update && apt-get install -y <your-packages>

While effective, this approach can slow down apt-get update operations slightly as apt won't use any local or intermediate caches. However, it significantly improves reliability for builds. Remove the temporary /etc/apt/apt.conf.d/no-cache file in a later layer if you don't want it in your final image.

3. Force Refresh Docker Build Cache

If you suspect Docker's build cache is the problem (e.g., you changed your Dockerfile but it's still using old layers for apt-get update), force a fresh build.

docker build --no-cache -t my_app_image .

This command forces Docker to ignore its build cache for all layers. While effective, it can lead to longer build times. Use it when other methods fail, or during initial development/debugging.

4. Specify a Different APT Mirror

Sometimes, your default APT mirror might be out of sync or experiencing issues. You can try switching to a different mirror.

# Edit the sources.list file (e.g., using sed in a Dockerfile)
# Example: Change default archive.ubuntu.com to mirrors.kernel.org
RUN sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.kernel.org/ubuntu|g' /etc/apt/sources.list && 
    apt-get update

You can find a list of official Ubuntu mirrors on the Ubuntu website to choose a geographically closer or more reliable alternative.

5. Verify Network Connectivity and DNS Resolution (from within container)

Ensure your container has proper network access and can resolve hostnames. Issues here can indirectly lead to corrupt downloads.

# From your host system, access the container's shell:
docker exec -it <container_id_or_name> bash

# Inside the container:
ping google.com -c 4 # Check basic connectivity
curl -sSf https://ifconfig.me # Check outbound internet access
cat /etc/resolv.conf # Check DNS servers

If ping or curl fail, investigate your Docker network configuration, host firewall rules, or corporate proxy settings. Check /etc/resolv.conf to ensure valid DNS servers are configured inside the container (e.g., 8.8.8.8 or 1.1.1.1 if not using local DNS).

6. Consider Using a BuildKit Cache Mount (Advanced Docker Builds)

For more efficient and reliable caching in modern Docker builds, especially when dealing with frequent apt-get operations, leverage BuildKit's cache mounts. This provides a managed cache for apt that survives across builds without resorting to --no-cache.

First, ensure you're using BuildKit. You can enable it by setting DOCKER_BUILDKIT=1 or using a docker-compose build service configuration.

# syntax=docker/dockerfile:1.4

FROM ubuntu:latest

# Create a dummy apt.conf to use with the cache mount
RUN echo 'APT::Acquire::Retries "3";' > /etc/apt/apt.conf.d/99retries

# Use a cache mount for apt lists and cache
RUN --mount=type=cache,target=/var/cache/apt 
    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked 
    apt-get update && 
    apt-get install -y --no-install-recommends 
        curl 
        wget 
        # ... your other packages ...
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt/*

This method provides fine-grained control over caching, allowing apt to cache its data between builds without interfering with Docker's layer caching mechanism, leading to faster and more reliable builds. The sharing=locked option prevents issues if multiple apt processes try to write to the cache simultaneously.

7. Check Host System Resources

While less common for a direct Hash Sum mismatch, resource exhaustion on your Alpine Linux host could indirectly affect network stability or file operations within the container.

# On your Alpine Linux host:
df -h # Check disk space
free -h # Check memory usage

Ensure your host has sufficient disk space and memory. A full disk can lead to partial downloads or file corruption.

By systematically working through these solutions, you should be able to resolve the "Hash Sum mismatch" error and achieve consistently successful apt-get update operations within your Ubuntu Docker containers on Alpine Linux hosts.

👨‍💻

Johnathon Wheeler

Senior Systems Architect & DevOps Engineer • Austin, TX

Connect on LinkedIn →

Johnathon has over 16 years of hands-on experience designing, debugging, and scaling Linux web hosting stacks, container clusters, and high-availability database architectures. Every guide on ButItWorkedLocal is independently tested against Debian 12, Ubuntu 24.04/22.04 LTS, Rocky Linux, and Docker environments to guarantee reproducibility in production.

🛡️

Our Production Verification Guarantee

Encountering a bug not covered here or running a non-standard kernel configuration? Our solutions are continually refined against real production incidents. Submit an environment trace for our editorial team to replicate.