Repository navigation
[BUG] type=image volumes fail with "No such image" when the source image is already present locally #14005
Description
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", "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/data/content.txt"]
volumes:
- type: image
source: imgvol-source
target: /data
EOF
docker compose -p imgvol-repro up --buildResult:
✘ 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/
EOFFirst 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)
Activity
docker_compose: Add xfails for gh#docker/compose#14005
Merge pull request #26296 from ricardobranco777/docker
Use short image ID for image volume mount source
test: image volume from an already-local image
ci: run e2e matrix with and without the containerd image store
ci(e2e): run e2e against the containerd image store
test: image volume from an already-local image
ci: run e2e matrix with and without the containerd image store
fix(build): resolve image volumes to a mountable name, not a manifest…