testcontainers / testcontainers/testcontainers-java
[Enhancement/Bug*]: Testcontainers does not fall back to linux/amd64 when registry returns missing architecture
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 8.7k
- Forks
- 1.9k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 9
Description
Module
Core
Testcontainers version
1.21.4
Using the latest Testcontainers version?
Yes
Host OS
Mac
Host Arch
arm64
Docker version
podman version
Client: Podman Engine
Version: 5.6.2
API Version: 5.6.2
Go Version: go1.25.1
Git Commit: 9dd5e1ed33830612bc200d7a13db00af6ab865a4
Built: Tue Sep 30 21:35:47 2025
Build Origin: pkginstaller
OS/Arch: darwin/arm64
Server: Podman Engine
Version: 5.6.2
API Version: 5.6.2
Go Version: go1.24.7
Git Commit: 9dd5e1ed33830612bc200d7a13db00af6ab865a4
Built: Tue Sep 30 02:00:00 2025
OS/Arch: linux/arm64
What happened?
Expected behavior
When pulling a Docker image that only provides a linux/amd64 platform, Testcontainers should automatically fall back to linux/amd64 on ARM-based hosts (e.g. Apple Silicon Macs), as it already does for DockerClientException and NotFoundException.
Actual behavior
Registries like JFrog Artifactory may return:
com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"no image found in manifest list for architecture \"arm64\", variant \"v8\", OS \"linux\""}
While the 500 Internal server error from JFrog is arguably misleading/incorrect I still think testcontainers should provide an option to specify the arch or fallback strategy outside of using a direct image SHA.
Relevant log output
com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"no image found in manifest list for architecture \"arm64\", variant \"v8\", OS \"linux\""}
at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:247)
at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.lambda$executeAndStream$1(DefaultInvocationBuilder.java:269)
at java.base/java.lang.Thread.run(Thread.java:1474)
2026-05-27T12:16:09.667+02:00 WARN 46613 --- [ Test worker] [] t.r.b.d.4.0.11-r2 : Retrying pull for image: registry.bankdata.dev/all-docker-centrals/ibm-messaging/mq:9.4.0.11-r2 (112s remaining)
2026-05-27T12:16:13.150+02:00 ERROR 46613 --- [ream--322867326] [] c.g.d.api.async.ResultCallbackTemplate : Error during callback
com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"no image found in manifest list for architecture \"arm64\", variant \"v8\", OS \"linux\""}
Additional Information
Issue has great similarity to:
issues/9214:pull/9200
but I am unsure if it qualifies as a bug or an enhancement.
Would love to get some input. Won't fix is a very valid response as the issue is primarily JFrog related.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading issue 9214 and pull request 9200, then locate the existing fallback handling for DockerClientException and NotFoundException. Reproduce the arm64 image pull failure against the described registry behavior and inspect the relevant tests. Done means the missing-architecture response is handled consistently, or the requested architecture/fallback option is clearly supported.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, java
- Domain
- devops, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100