Pet*_*čka 4 docker jwilder-nginx-proxy apple-m1
我有带 M1 的 mac,如果我尝试通过 jwilder 使用 nginx-proxy 运行 docker 容器,则会出现此错误:
api_clever4sms_nginx-proxy | runtime: failed to create new OS thread (have 2 already; errno=22)
api_clever4sms_nginx-proxy | fatal error: newosproc
api_clever4sms_nginx-proxy |
api_clever4sms_nginx-proxy | runtime stack:
api_clever4sms_nginx-proxy | runtime.throw(0x884500, 0x9)
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/panic.go:530 +0x90
api_clever4sms_nginx-proxy | runtime.newosproc(0xc820026000, 0xc820035fc0)
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/os1_linux.go:149 +0x18c
api_clever4sms_nginx-proxy | runtime.newm(0x932358, 0x0)
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/proc.go:1513 +0x135
api_clever4sms_nginx-proxy | runtime.main.func1()
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/proc.go:125 +0x2c
api_clever4sms_nginx-proxy | runtime.systemstack(0xa8e800)
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/asm_amd64.s:291 +0x79
api_clever4sms_nginx-proxy | runtime.mstart()
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/proc.go:1048
api_clever4sms_nginx-proxy |
api_clever4sms_nginx-proxy | goroutine 1 [running]:
api_clever4sms_nginx-proxy | runtime.systemstack_switch()
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/asm_amd64.s:245 fp=0xc820020770 sp=0xc820020768
api_clever4sms_nginx-proxy | runtime.main()
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/proc.go:126 +0x62 fp=0xc8200207c0 sp=0xc820020770
api_clever4sms_nginx-proxy | runtime.goexit()
api_clever4sms_nginx-proxy | /usr/local/go1.6/src/runtime/asm_amd64.s:1998 +0x1 fp=0xc8200207c8 sp=0xc8200207c0
api_clever4sms_nginx-proxy exited with code 2
Run Code Online (Sandbox Code Playgroud)
请问你知道如何解决这个问题吗?
Tim*_*nen 15
Docker 能够通过内置于 Mac 版 Docker Desktop中的qemuamd64进行模拟。arm64
如果 Dockerfile 是为amd64/构建的,则为 /编译的程序仍应通过此模拟运行x86_64amd64
Dockerfile:
FROM --platform=linux/amd64 your_amd64_image
...
Run Code Online (Sandbox Code Playgroud)
或环境变量DOCKER_DEFAULT_PLATFORM=linux/amd64
问题是qemu中似乎有一个bug。
这是一个类似的问题:https ://gitlab.com/qemu-project/qemu/-/issues/340
All*_*len 10
对于其他遇到与此类似的错误但使用不同容器的人来说,@RomanShamborovskyi 上面关于检查 DockerHub 上可用的镜像的提示为我解决了这个问题。就我而言,我的 docker-compose.yml 文件被配置为使用image: redis:3.2.4仅列出支持 的文件linux/amd64,但是,我能够升级到image: redis: 3.2.10支持列出的文件linux/arm/v7,并且在 Docker 中对我有用,而不会遇到错误。如果您可以找到支持arm的软件的类似版本,只需要一个小补丁更新,那么希望它不需要像更新到更高的主要版本号那样重构您的代码。
小智 7
我在 M1 (arm64) 中运行 mysql docker,当我尝试构建容器时遇到相同的错误。我将 mysql docker 映像更改为image: mysql:8.0.26,platform: linux/x86_64并添加default_authentication_plugin=mysql_native_password 到 my.cnf 然后我通过这些设置重建一个 docker 容器并且它可以工作。
小智 5
您可以在此处看到jwilder 中的所有 nginx-proxy 映像仅针对单个平台 - amd64构建,而您的全新 mac 是arm64。
我会尝试做的是从这个镜像的 repo 中获取源代码, 然后自己在 arm64 mac 上本地从 Dockerfile 构建它。这样,当您检查创建的 docker 映像时,您会看到该平台现在是 arm64。您发布的这些异常将消失。
当你做这些事情时,查找作为你想要的镜像的基础镜像链也很重要,即你的镜像是从 nginx:1.19.3-alpine 构建的,你可以在Dockerfile 中看到它。该映像是多平台的,支持 arm64。
小智 5
我对内部 docker 容器也有同样的问题,我检查了 docker 文档,这对我有帮助:https ://collabnix.com/warning-the-requested-images-platform-linux-amd64-does -不匹配检测到的主机平台-linux-arm64-v8/。
\n总而言之:
\n| 归档时间: |
|
| 查看次数: |
3231 次 |
| 最近记录: |