Description
If an arm64 version of an image is present but not the amd64 version, the platform tag when set to amd64 in docker-compose is not honored. If both or neither are present, then platform is honored.
Steps to reproduce the issue:
- Create a test service in a docker-compose file with the
linux/amd64 architecture platform specified.
version: '3'
services:
my-test-service:
platform: linux/amd64
image: openjdk:11
Ensure the image does not exist in docker. Then pull the image for the arm64 architecture (but not the amd64 image):
$ docker pull --platform linux/arm64 openjdk:11
Run the test service with uname and observe the wrong architecture:
$ DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose run --rm my-test-service uname -a
Linux ... aarch64 GNU/Linux
This only appears to happen if the arm64 image is already there and the amd64 image is not. If there is no image, docker-compose will pull the correct amd64 image.
Describe the results you received:
docker-compose runs the arm64 image
Describe the results you expected:
docker-compose runs the amd64 image.
Output of docker compose version:
Docker Compose version v2.7.0
Output of docker info:
Client:
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.8.2)
compose: Docker Compose (Docker Inc., v2.7.0)
extension: Manages Docker extensions (Docker Inc., v0.2.8)
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 11
Running: 0
Paused: 0
Stopped: 11
Images: 32
Server Version: 20.10.17
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
runc version: v1.1.2-0-ga916309
init version: de40ad0
Security Options:
seccomp
Profile: default
cgroupns
Kernel Version: 5.10.104-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: aarch64
CPUs: 5
Total Memory: 15.6GiB
Name: docker-desktop
ID: XA6U:B2LX:OK77:JHUI:PGJX:EC7I:TH26:F2UH:LNCP:JFYI:N2TY:7KJ5
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5000
127.0.0.0/8
Live Restore Enabled: false
Additional environment details:
Description
If an
arm64version of an image is present but not theamd64version, theplatformtag when set toamd64in docker-compose is not honored. If both or neither are present, thenplatformis honored.Steps to reproduce the issue:
linux/amd64architecture platform specified.Ensure the image does not exist in docker. Then pull the image for the
arm64architecture (but not theamd64image):Run the test service with
unameand observe the wrong architecture:This only appears to happen if the
arm64image is already there and theamd64image is not. If there is no image, docker-compose will pull the correctamd64image.Describe the results you received:
docker-compose runs the arm64 image
Describe the results you expected:
docker-compose runs the amd64 image.
Output of
docker compose version:Output of
docker info:Additional environment details: