在Apple Silicon上通过Testcontainers设置Docker Build的--platform选项
在Apple Silicon设备上配置Docker构建/容器运行的linux/amd64平台
问题说明
我在Apple Silicon设备上尝试为Docker设置linux/amd64平台,用Testcontainers的GenericContainer写了这段代码:
new GenericContainer<>("someImage") .withCreateContainerCmdModifier(it -> it.withPlatform("linux/amd64"));
但这段代码无法正常运行,不过直接执行Docker构建命令却能成功:
docker build --platform linux/amd64 -t someLabel .
解决方法
你混淆了容器创建和镜像构建的配置逻辑:你写的代码是修改容器启动阶段的平台参数,但对比的Docker命令是镜像构建阶段的参数,两者操作环节不同。
1. 实现Docker构建时指定平台(对应docker build --platform)
如果是用Testcontainers构建镜像,需要在镜像构建的配置中指定平台参数:
GenericContainer<?> container = new GenericContainer<>( new ImageFromDockerfile() .withDockerfile(new File("./Dockerfile")) .withBuildImageCmdModifier(cmd -> cmd.withPlatform("linux/amd64")) );
2. 拉取并运行预构建的amd64镜像
如果是直接使用已有的amd64镜像启动容器,要在指定镜像时就声明平台:
DockerImageName imageName = DockerImageName.parse("someImage") .withPlatform("linux/amd64"); GenericContainer<?> container = new GenericContainer<>(imageName);
前提配置
确保Docker Desktop已开启「Use Rosetta for x86/amd64 emulation on Apple Silicon」选项(路径:设置 -> Features in development),这是Apple Silicon上运行amd64容器的必要条件。
内容的提问来源于stack exchange,提问作者Paul Allen
相关产品推荐
相关产品推荐

