Skip to content

[BUG] type=image volumes fail with "No such image" when the source image is already present locally #14005

Description

@ricardobranco777

Description

docker compose up fails to create a container that mounts a type: image volume with Error response from daemon: No such image: sha256:<digest> even though the referenced image exists locally.

This was caught by openQA when running your tests and these failed: TestImageVolume & TestImageVolumeRecreateOnRebuild.

Steps To Reproduce

Scenario 1: built image

mkdir -p /tmp/imgvol-repro && cd /tmp/imgvol-repro

cat > Dockerfile <<'EOF'
FROM alpine
RUN echo hello > /content.txt
EOF

cat > compose.yaml <<'EOF'
services:
  source:
    build: .
    image: imgvol-source

  consumer:
    image: alpine
    depends_on:
      - source
    command: ["cat", "/data/content.txt"]
    volumes:
      - type: image
        source: imgvol-source
        target: /data
EOF

docker compose -p imgvol-repro up --build

Result:

 ✘ service:consumer:1                Error response from daemon: No such image: sha256:8d32cebc29f3dd77e043c002d09576aef8a85f58f0265541b1c082d65b3ec799                                  0.0s
Error response from daemon: No such image: sha256:8d32cebc29f3dd77e043c002d09576aef8a85f58f0265541b1c082d65b3ec799

Expected: consumer is created and prints hello.

Scenario 2: pulled image, second run

cat > compose-pull.yaml <<'EOF'
services:
  consumer:
    image: alpine
    command: ["ls", "-la", "/data"]
    volumes:
      - type: image
        source: nginx:alpine
        target: /data
        image:
          subpath: usr/share/nginx/html/
EOF

First run: nginx:alpine is not yet present locally
docker compose -f compose-pull.yaml -p imgvol-repro up

Result: succeeds, consumer lists the mounted files.

Second run: nginx:alpine is now present locally from the first run

docker compose -f compose-pull.yaml -p imgvol-repro up

Result:

  ✘ service:consumer:1 Error response from daemon: No such image: sha256:1d40e3eb3bf4f138de1d67193f2aa5309fcaf343eb5ffadbf5e9439de1eb1ebb

Expected: identical successful result to the first run.

Compose Version

Docker Compose version 5.4.0

Docker Environment

Client:
 Version:    29.4.0-ce
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  0.33.0
    Path:     /usr/lib/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  5.4.0
    Path:     /usr/lib/docker/cli-plugins/docker-compose

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 2
 Server Version: 29.4.0-ce
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: oci runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e8b1a9bc270f9952197c470b8bad573b03a3a608
 runc version: v1.4.3-0-gbb14dabe
 init version: 
 Security Options:
  seccomp
   Profile: builtin
  selinux
  cgroupns
 Kernel Version: 7.1.5-1-default
 Operating System: openSUSE Tumbleweed
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 15.55GiB
 Name: susetest
 ID: 9fd56017-09a8-4357-a23a-159e628b2959
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false
 Firewall Backend: iptables+firewalld
  ReloadedAt: 2026-08-05T12:22:02-04:00

Anything else?

For some reason this was not caught by your CI. This was caught in openQA when testing the latest opensuse Tumbleweed snapshot 20260804:

http://openqa-assets.opensuse.org/tests/6146470/file/docker_compose-e2e-compose.txt

# Test messages # TestImageVolume
# failure: 

Failed
=== RUN   TestImageVolume
    framework.go:170: WARNING: docker-model cli-plugin not found
    volumes_test.go:176: Running command: docker compose version
Docker Compose version 5.4.0
    volumes_test.go:182: 	[TestImageVolume] docker version -f {{.Server.Version}}
    volumes_test.go:189: Running command: docker compose -f ./fixtures/volumes/compose.yaml --project-name compose-e2e-image-volume up with_image
    volumes_test.go:189: assertion failed: 
        Command:  docker compose -f ./fixtures/volumes/compose.yaml --project-name compose-e2e-image-volume up with_image
        ExitCode: 1
        Error:    exit status 1
        Stdout:   
        Stderr:    Network compose-e2e-image-volume_default Creating 
         Network compose-e2e-image-volume_default Creating 
         Network compose-e2e-image-volume_default Created 
         Network compose-e2e-image-volume_default Created 
         Container compose-e2e-image-volume-with_image-1 Creating 
         service:with_image:1 Error response from daemon: No such image: sha256:1d40e3eb3bf4f138de1d67193f2aa5309fcaf343eb5ffadbf5e9439de1eb1ebb 
        Error response from daemon: No such image: sha256:1d40e3eb3bf4f138de1d67193f2aa5309fcaf343eb5ffadbf5e9439de1eb1ebb
        
        
        Failures:
        ExitCode was 1 expected 0
        Expected no error
    volumes_test.go:179: Running command: docker compose -p compose-e2e-image-volume down -v --remove-orphans
    framework.go:143: Contents of config dir:
    framework.go:145:   - /tmp/TestImageVolume790676610/001
    framework.go:145:   - /tmp/TestImageVolume790676610/001/cli-plugins
    framework.go:145:   - /tmp/TestImageVolume790676610/001/cli-plugins/docker-buildx
    framework.go:145:   - /tmp/TestImageVolume790676610/001/cli-plugins/docker-compose
    framework.go:145:   - /tmp/TestImageVolume790676610/001/cli-plugins/docker-scan
--- FAIL: TestImageVolume (0.59s)
# Test messages # TestImageVolumeRecreateOnRebuild
# failure: 

Failed
=== RUN   TestImageVolumeRecreateOnRebuild
    framework.go:170: WARNING: docker-model cli-plugin not found
    volumes_test.go:195: Running command: docker compose version
Docker Compose version 5.4.0
    volumes_test.go:202: 	[TestImageVolumeRecreateOnRebuild] docker version -f {{.Server.Version}}
    volumes_test.go:210: Running command: docker compose -f ./fixtures/image-volume-recreate/compose.yaml --project-name compose-e2e-image-volume-recreate build --build-arg CONTENT=foo
#1 [internal] load local bake definitions
#1 reading from stdin 643B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 835B done
#2 DONE 0.0s

#3 resolve image config for docker-image://docker.io/docker/dockerfile:1
#3 DONE 0.4s

#4 docker-image://docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89
#4 resolve docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 0.0s done
#4 sha256:50ba52cd6a2c01eaf1a9efbedc7c75b5da5e3965c1586001c722980487a73fd7 14.36MB / 14.36MB 0.1s done
#4 extracting sha256:50ba52cd6a2c01eaf1a9efbedc7c75b5da5e3965c1586001c722980487a73fd7 0.1s done
#4 DONE 0.3s

#5 [internal] load metadata for docker.io/library/alpine:latest
#5 DONE 0.3s

#6 [internal] load .dockerignore
#6 transferring context: 2B done
#6 DONE 0.0s

#7 [1/3] FROM docker.io/library/alpine:latest@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b
#7 resolve docker.io/library/alpine:latest@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b 0.0s done
#7 CACHED

#8 [2/3] WORKDIR /app
#8 DONE 0.0s

#9 [3/3] RUN echo "foo" > /app/content.txt
#9 DONE 0.1s

#10 exporting to image
#10 exporting layers 0.1s done
#10 exporting manifest sha256:a86fb08624c3c1f065a96b693c6e3c8ec7595c906437cef55e82613012142bbe done
#10 exporting config sha256:771cc3ddf4f6bebce42c15337aab835cedca2b351f33e71bf3692e5fc2210ec4 done
#10 exporting attestation manifest sha256:312941b01ca2a2128b69eaf8559b8735b92201440f79ff8d9e4cf741444d42f1 0.0s done
#10 exporting manifest list sha256:0e97c48557001c59e388d5e41108df0d1901b27042a893a5abc30030071cab6a done
#10 naming to docker.io/library/image-volume-source:latest
#10 naming to docker.io/library/image-volume-source:latest done
#10 unpacking to docker.io/library/image-volume-source:latest 0.0s done
#10 DONE 0.1s

#11 resolving provenance for metadata file
#11 DONE 0.0s
    volumes_test.go:212: Running command: docker compose -f ./fixtures/image-volume-recreate/compose.yaml --project-name compose-e2e-image-volume-recreate up -d
    volumes_test.go:212: assertion failed: 
        Command:  docker compose -f ./fixtures/image-volume-recreate/compose.yaml --project-name compose-e2e-image-volume-recreate up -d
        ExitCode: 1
        Error:    exit status 1
        Stdout:   
        Stderr:    Network compose-e2e-image-volume-recreate_default Creating 
         Network compose-e2e-image-volume-recreate_default Creating 
         Network compose-e2e-image-volume-recreate_default Created 
         Network compose-e2e-image-volume-recreate_default Created 
         Container compose-e2e-image-volume-recreate-source-1 Creating 
         Container compose-e2e-image-volume-recreate-source-1 Created 
         Container compose-e2e-image-volume-recreate-consumer-1 Creating 
         service:consumer:1 Error response from daemon: No such image: sha256:a86fb08624c3c1f065a96b693c6e3c8ec7595c906437cef55e82613012142bbe 
        Error response from daemon: No such image: sha256:a86fb08624c3c1f065a96b693c6e3c8ec7595c906437cef55e82613012142bbe
        
        
        Failures:
        ExitCode was 1 expected 0
        Expected no error
    volumes_test.go:198: Running command: docker compose -p compose-e2e-image-volume-recreate down -v --remove-orphans
    volumes_test.go:199: 	[TestImageVolumeRecreateOnRebuild] docker rmi -f image-volume-source
    framework.go:143: Contents of config dir:
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/.buildNodeID
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/.lock
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/activity
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/activity/default
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/current
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/defaults
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/instances
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/__group__
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/__group__/uxp25pzplg7vmlg36bg81tt88
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/default
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/default/default
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/default/default/fo2yu6atj4qaovhgvox33mm9o
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/buildx/refs/version
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/cli-plugins
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/cli-plugins/docker-buildx
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/cli-plugins/docker-compose
    framework.go:145:   - /tmp/TestImageVolumeRecreateOnRebuild1125399722/001/cli-plugins/docker-scan
--- FAIL: TestImageVolumeRecreateOnRebuild (2.39s)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions