53

I have mac with M1 and if i try to run docker container with nginx-proxy by jwilder, I got this error:

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

Please do you know how to solve this?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Petr Kvasnička
  • 643
  • 1
  • 4
  • 5

5 Answers5

15

You can see here that all nginx-proxy images from jwilder are built only for single platform - amd64, while your brand new mac is arm64.

What I would try to do, is to get the sources from this image's repo and build it from Dockerfile locally on your arm64 mac by yourself. This way, when you inspect your created docker image, you'll see that platform is arm64 now. And these exceptions that you posted will be gone.

When you do such things, it also always important to look up the chain of images that are base for your desired image, i.e. your image is built from nginx:1.19.3-alpine, you can see that in Dockerfile. And that image is multiplatform and supports arm64.

15

Docker has the ability to emulate amd64 on arm64 through qemu which is built into Docker Desktop for Mac.

Programs compiled for amd64/x86_64 should still work through this emulation if the Dockerfile is built for amd64

Dockerfile:

FROM --platform=linux/amd64 your_amd64_image
...

or env variable DOCKER_DEFAULT_PLATFORM=linux/amd64

The problem is that there seems to be a bug in qemu.

Here is a similar problem: https://gitlab.com/qemu-project/qemu/-/issues/340

Timo Huovinen
  • 53,325
  • 33
  • 152
  • 143
9

For anyone else who has an error similar to this but with a different container, the tip above by @RomanShamborovskyi about checking which images are available on DockerHub is what solved the issue for me. In my case, my docker-compose.yml file was configured to use image: redis:3.2.4 which was only listed with support for linux/amd64, however, I was able to upgrade to image: redis: 3.2.10 which was listed with support for linux/arm/v7 and that worked for me within Docker without encountering an error. If you can find a similar version of your software with arm support that only requires a small patch update then hopefully it won't require refactoring your code like updating to a higher major version number would.

Allen
  • 2,717
  • 2
  • 30
  • 34
  • 1
    I was having an issue with `redis:3.2.4` as well! This resolved my problem. Thanks, Allen! – JR. Mar 22 '22 at 14:10
6

I run mysql docker in my M1 (arm64) and I got the same error when I try to build a container. I change mysql docker image to be image: mysql:8.0.26, platform: linux/x86_64 and add default_authentication_plugin=mysql_native_password to my.cnf Then I rebuild a docker container through those settings and it works.

htlbydgod
  • 330
  • 2
  • 8
  • 2
    Thanks, we had an old `docker-compose.yml` that was using `mysql:8.0.16` and updating to `mysql:8.0.26`, `platform: linux/amd64` allowed MySQL to successfully startup on an M1 Mac. – Matthew Buckett Dec 17 '21 at 15:44
3

I had the same issue with the in-house docker container, I've checked the docker docs and this has helped me: https://collabnix.com/warning-the-requested-images-platform-linux-amd64-does-not-match-the-detected-host-platform-linux-arm64-v8/ .

TLDR:

  1. Go to the Settings > section and check the box to enable the Apple Virtualization framework.
  2. Under the “Feature in development section”, enable Rosetta.