我是 macOS 和 Docker 的新手。当我尝试在 Apple Silicon M2 上使用 Docker 启动我的项目时,遇到了一系列障碍。我认为我面临的问题与图像之间的不良兼容性有关:webdevops/php-apache-dev:7.2 和我使用的平台。
我的 docker-compose.yml 看起来像这样:
version: "3"
services:
web:
image: webdevops/php-apache-dev:7.2
另外,我在某些地方更改了它以添加:
version: "3"
services:
web:
platform:linux/amd64
image: webdevops/php-apache-dev:7.2
但不断出现错误。
我不知道还能尝试什么。如果您有任何见解或解决方案可以分享,我将非常感谢您的指导!
当我启动 docker-compose up 时,我在 my_project 容器内收到一条错误消息,如下所示:
goroutine 1 [running]:
runtime.systemstack_switch()
/usr/local/Cellar/go/1.8.1/libexec/src/runtime/asm_amd64.s:281 fp=0xc420028788 sp=0xc420028780
runtime.main()
/usr/local/Cellar/go/1.8.1/libexec/src/runtime/proc.go:127 +0x6c fp=0xc4200287e0 sp=0xc420028788
runtime.goexit()
/usr/local/Cellar/go/1.8.1/libexec/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc4200287e8 sp=0xc4200287e0
my_project exited with code 2
在寻求故障排除时,我尝试将 platform: linux/amd64 密钥添加到 docker-compose.yml 文件中的 Web 服务。然而,这导致了另一个障碍:
Error response from daemon: image with reference webdevops/php-apache-dev:7.2 was found but does not match the specified platform: wanted linux/arm64/v8, actual: linux/amd64
切换齿轮,我尝试将图像更改为 webdevops/php-apache-dev:7.4,但这导致我又出现了另一个错误:
[+] Running 1/1
✘ web Error 20.2s
Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp: lookup http.docker.internal on 192.168.65.7:53: read udp 192.168.0.1:49962->192.168.65.7:53: i/o timeout
正如您正确指出的那样,此错误的原因是平台不兼容。目前,您尝试使用的图像仅适用于amd64平台,该平台只能通过仿真在M2处理器上运行。为了启用 Rosetta2 进行仿真,您需要运行以下命令:
softwareupdate --install-rosetta
但是,没有为您的平台构建此映像并不意味着您绝对必须依赖仿真。 此镜像有可用的 Dockerfile(但是,Docker Hub 上的任何位置均未标明其位置),您可以为您的平台构建它。
最后,如果您不依赖此特定映像,最简单的选择是找到提供相同软件并为您的平台构建的替代映像。例如,webhippie/php-apache 和 silarhi/php-apache 是为 arm64 构建的,可以在本地运行而不依赖于仿真。