├── setups
├── rancher-desktop-dockerd-m1.md
├── docker-desktop-intel.md
├── docker-desktop-m1.md
├── ubuntu-amd64.md
├── podman-m1.md
├── colima-m1.md
├── minikube-hyperkit-m1.sh
├── minikube-docker-desktop-m1.sh
├── minikube-docker-desktop-m1.md
├── minikube-hyperkit-m1.md
├── podman-m1.sh
└── colima-m1.sh
├── .github
└── workflows
│ └── run-docker-tests.yml
├── tests
├── t1.sh
├── t2.sh
├── t6.sh
├── t5.sh
├── t3.sh
└── t4.sh
├── LICENSE
├── run-tests.sh
└── README.md
/setups/rancher-desktop-dockerd-m1.md:
--------------------------------------------------------------------------------
1 | # rancher-desktop dockerd m1 setup for state-of-docker-on-m1
2 |
3 |
4 | ## installation steps
5 |
6 | Steps:
7 |
8 | 1. install docker for mac https://docs.rancherdesktop.io/installation
9 | 2. as container runtime choose "dockerd"
--------------------------------------------------------------------------------
/.github/workflows/run-docker-tests.yml:
--------------------------------------------------------------------------------
1 | name: Run Tests on Ubuntu
2 |
3 | on:
4 | push
5 |
6 |
7 | jobs:
8 |
9 | build:
10 |
11 | runs-on: ubuntu-latest
12 |
13 | steps:
14 | - uses: actions/checkout@v2
15 | - name: Run Tests
16 | run: sh run-tests.sh
17 |
--------------------------------------------------------------------------------
/setups/docker-desktop-intel.md:
--------------------------------------------------------------------------------
1 | # docker-desktop intel setup for state-of-docker-on-m1
2 |
3 | This is of course not an m1 macbook setup. But it describes how the reference macbook intel is installed with docker
4 | desktop.
5 |
6 | ## installation steps
7 |
8 | Steps:
9 |
10 | 1. install docker for mac https://docs.docker.com/desktop/mac/install/
11 |
--------------------------------------------------------------------------------
/tests/t1.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "trusty openresty amd64 image"
6 | exit 0
7 | fi
8 |
9 | if [ ! `which docker` ]
10 | then
11 | exit 1;
12 | fi
13 |
14 | docker run --platform linux/amd64 --rm openresty/openresty:1.13.6.1-2-trusty nginx -t 2>&1 | grep "error" > /dev/null
15 |
16 | if [ "$?" = "0" ]
17 | then
18 | exit 1;
19 | fi
--------------------------------------------------------------------------------
/tests/t2.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "alpine openresty amd64 image"
6 | exit 0
7 | fi
8 |
9 | if [ ! `which docker` ]
10 | then
11 | exit 1;
12 | fi
13 |
14 | docker run --platform linux/amd64 --rm openresty/openresty:1.19.9.1-5-alpine nginx -t 2>&1 | grep "error" > /dev/null
15 |
16 | if [ "$?" = "0" ]
17 | then
18 | exit 1;
19 | fi
--------------------------------------------------------------------------------
/setups/docker-desktop-m1.md:
--------------------------------------------------------------------------------
1 | # docker-desktop m1 setup for state-of-docker-on-m1
2 |
3 |
4 | ## installation steps
5 |
6 | Steps:
7 |
8 | 1. install docker for mac https://docs.docker.com/desktop/mac/install/
9 | 2. activate "rosetta 2" emulator for amd64
10 |
11 | ```console
12 | $ softwareupdate --install-rosetta
13 | ```
14 |
15 | ## uninstall steps
16 |
17 |
18 | Remove from "~/.docker/config.json" the key value
19 |
20 | ```
21 | "credsStore" : "desktop",
22 | ```
--------------------------------------------------------------------------------
/setups/ubuntu-amd64.md:
--------------------------------------------------------------------------------
1 | # ubuntu amd64 for state-of-docker-on-m1
2 |
3 | This is of course not an m1 and not a macbook setup. But it describes how the reference runner is installed.
4 |
5 | ## installation steps
6 |
7 | Steps:
8 |
9 | 1. setup an ubuntu docker "focal version"
10 | 2. install docker
11 | 3. validate setup
12 | ```
13 | Distributor ID: Ubuntu
14 | Description: Ubuntu 20.04.3 LTS
15 | Release: 20.04
16 | Codename: focal
17 | ```
--------------------------------------------------------------------------------
/setups/podman-m1.md:
--------------------------------------------------------------------------------
1 | # podman setup for state-of-docker-on-m1
2 |
3 | ## installation steps
4 |
5 | The steps are included in [podman-m1.sh](./podman-m1.sh).
6 |
7 | Steps:
8 |
9 | 1. Homebrew
10 | 2. Install podman with Brew
11 | 3. Init Podman VM
12 | 4. Start Podman VM
13 | 5. Symlink docker cli to podman cli
14 |
15 | ## Uninstall steps
16 |
17 | 1. Stop and delete podman vm
18 |
19 | ```console
20 | $ podman machine stop
21 | $ podman machine rm --force
22 | ```
23 |
24 | 2. Uninstall
25 |
26 | ```console
27 | $ brew uninstall podman
28 | ```
29 |
30 | 3. Remove docker symlink
31 |
32 | ```console
33 | $ rm /usr/local/bin/docker
34 | ```
--------------------------------------------------------------------------------
/setups/colima-m1.md:
--------------------------------------------------------------------------------
1 | # colima setup for state-of-docker-on-m1
2 |
3 | ## installation steps
4 |
5 | The steps are included in [colima-m1.sh](./colima-m1.sh).
6 |
7 | Steps:
8 |
9 | 1. Homebrew
10 | 2. Docker CLI with Brew
11 | 3. Colima with Brew
12 | 4. Docker-Compose with Brew
13 | 5. Launch Colima VM
14 | 6. Install binfmt (amd64 emulator) into Docker
15 |
16 | ## Uninstall steps
17 |
18 | 1. Stop colima vm
19 |
20 | ```console
21 | $ colima stop
22 | ```
23 |
24 | 2. Uninstall
25 |
26 | ```console
27 | $ brew uninstall colima docker-compose docker
28 | ```
29 |
--------------------------------------------------------------------------------
/setups/minikube-hyperkit-m1.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | if [ ! `which brew` ]
6 | then
7 | echo "Install brew"
8 |
9 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
10 | echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.profile
11 | eval "$(/opt/homebrew/bin/brew shellenv)"
12 | else
13 | echo "Skip brew, because already available"
14 | fi
15 |
16 | if [ ! `which minikube` ]
17 | then
18 | echo "Install minikube"
19 | brew install minikube
20 | else
21 | echo "Skip minikube, because already available"
22 | fi
23 |
24 | IS_MINIKUBE_NOT_RUNNING=`minikube status | grep "minikube start" || true`
25 | if [ "$IS_MINIKUBE_NOT_RUNNING" ]
26 | then
27 | echo "Start minikube vm"
28 | minikube start --driver=hyperkit --no-kubernetes=true
29 | else
30 | echo "Skip starting of minikube vm, because already running"
31 | fi
--------------------------------------------------------------------------------
/setups/minikube-docker-desktop-m1.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | if [ ! `which brew` ]
6 | then
7 | echo "Install brew"
8 |
9 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
10 | echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.profile
11 | eval "$(/opt/homebrew/bin/brew shellenv)"
12 | else
13 | echo "Skip brew, because already available"
14 | fi
15 |
16 | if [ ! `which minikube` ]
17 | then
18 | echo "Install minikube"
19 | brew install minikube
20 | else
21 | echo "Skip minikube, because already available"
22 | fi
23 |
24 | brew upgrade minikube
25 |
26 | IS_MINIKUBE_NOT_RUNNING=`minikube status | grep "minikube start" || true`
27 | if [ "$IS_MINIKUBE_NOT_RUNNING" ]
28 | then
29 | echo "Start minikube vm"
30 | minikube start --driver=docker --no-kubernetes=true
31 | else
32 | echo "Skip starting of minikube vm, because already running"
33 | fi
--------------------------------------------------------------------------------
/setups/minikube-docker-desktop-m1.md:
--------------------------------------------------------------------------------
1 | # minikube docker desktop m1 setup for state-of-docker-on-m1
2 |
3 | ## installation steps
4 |
5 | Manual Steps:
6 |
7 | 1. install docker for mac https://docs.docker.com/desktop/mac/install/
8 | 2. Manually install "XCode" in App Store
9 | 3. Install rosetta 2
10 |
11 | ```
12 | $ softwareupdate --install-rosetta
13 | ```
14 |
15 | Automated Steps:
16 |
17 | The automated steps (after installing xcode manually via app store) are included in [minikube-docker-desktop-m1.sh](./minikube-docker-desktop-m1.sh).
18 |
19 | 1. Homebrew
20 | 2. Install "Rosetta 2"
21 | 4. Install minikube
22 | 5. Launch minikube VM
23 | 6. Configure docker cli
24 |
25 | ```console
26 | $ eval $(minikube -p minikube docker-env)
27 | ```
28 |
29 | ## Uninstall steps
30 |
31 | 1. Stop minikube vm
32 |
33 | ```console
34 | $ minikube delete
35 | ```
36 |
37 | 2. Uninstall
38 |
39 | ```console
40 | $ brew uninstall minikube
41 | ```
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | state-of-docker-m1 is licensed under the terms of MIT License.
2 |
3 | Copyright (c) 2022 by DracoBlue (JanS@DracoBlue.de)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/setups/minikube-hyperkit-m1.md:
--------------------------------------------------------------------------------
1 | # minikube hyperkit m1 setup for state-of-docker-on-m1
2 |
3 | IMPORTANT 2022-01-29: ⚠️ Hyperkit is not supported on non-x86-systems as of https://github.com/moby/hyperkit/issues/310.
4 |
5 | ```console
6 | $ minikube start --driver=hyperkit --no-kubernetes=true
7 | minikube v1.25.1 on Darwin 12.1 (arm64)
8 | ▪ MINIKUBE_ACTIVE_DOCKERD=minikube
9 | ✨ Using the hyperkit driver based on user configuration
10 |
11 | ❌ Exiting due to DRV_UNSUPPORTED_OS: The driver 'hyperkit' is not supported on darwin/arm64
12 | ```
13 |
14 | ## installation steps
15 |
16 | Manual Steps:
17 |
18 | 1. Manually install "XCode" in App Store
19 |
20 | Automated Steps:
21 |
22 | The automated steps (after installing xcode manually via app store) are included in [minikube-hyperkit-m1.sh](./podman-m1.sh).
23 |
24 | 1. Homebrew
25 | 3. Install hyperkit
26 | 4. Install minikube
27 | 5. Launch minikube VM
28 | 6. Configure docker cli
29 |
30 | ```console
31 | $ eval $(minikube -p minikube docker-env)
32 | ```
33 | 7. Install binfmt (am64 emulator) into Docker
34 |
35 | ## Uninstall steps
36 |
37 | 1. Stop colima vm
38 |
39 | ```console
40 | $ minikube stop
41 | ```
42 |
43 | 2. Uninstall
44 |
45 | ```console
46 | $ brew uninstall colima docker-compose docker
47 | ```
--------------------------------------------------------------------------------
/tests/t6.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "no error like 'l: applet not found'"
6 | exit 0
7 | fi
8 |
9 | if [ "$1" = "expected" ]
10 | then
11 | echo "Expected Success: \n"
12 | cat <<-'EXPECTED_SUCCESS'
13 | total 36
14 | drwxr-xr-x 2 root root 12288 Jul 29 01:32 bin
15 | drwxr-xr-x 5 root root 340 Aug 14 21:59 dev
16 | drwxr-xr-x 1 root root 4096 Aug 14 21:59 etc
17 | drwxr-xr-x 2 nobody nobody 4096 Jul 29 01:32 home
18 | dr-xr-xr-x 246 root root 0 Aug 14 21:59 proc
19 | drwx------ 2 root root 4096 Jul 29 01:32 root
20 | dr-xr-xr-x 13 root root 0 Aug 14 21:59 sys
21 | drwxrwxrwt 2 root root 4096 Jul 29 01:32 tmp
22 | drwxr-xr-x 3 root root 4096 Jul 29 01:32 usr
23 | drwxr-xr-x 4 root root 4096 Jul 29 01:32 var
24 | EXPECTED_SUCCESS
25 | echo "\nExpected Error: \n"
26 | cat <<-'EXPECTED_ERROR'
27 | l: applet not found
28 | EXPECTED_ERROR
29 | exit 0;
30 | fi
31 |
32 | if [ ! `which docker` ]
33 | then
34 | exit 1;
35 | fi
36 |
37 | docker run --rm --platform linux/amd64 --entrypoint ls busybox -l / 2>&1 | cat - | grep "applet not found" > /dev/null
38 |
39 | if [ "$?" = "0" ]
40 | then
41 | exit 1;
42 | fi
43 |
--------------------------------------------------------------------------------
/tests/t5.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "varnish 6.0.10 image"
6 | exit 0
7 | fi
8 |
9 | if [ "$1" = "expected" ]
10 | then
11 | echo "Expected Success: \n"
12 | cat <<-'EXPECTED_SUCCESS'
13 | Warnings:
14 | VCL compiled.
15 |
16 | Debug: Version: varnish-6.0.10 revision 9a7da4ff4c0c824af33e230740a11e99fdca23d9
17 | Debug: Platform: Linux,3.13.0-117-generic,x86_64,-junix,-smalloc,-sdefault,-hcritbit
18 | Debug: Child (19) Started
19 | Info: Child (19) said Child starts
20 | EXPECTED_SUCCESS
21 | echo "\nExpected Error: \n"
22 | cat <<-'EXPECTED_ERROR'
23 | Error:
24 | Message from VCC-compiler:
25 | Assert error in vju_subproc(), mgt/mgt_jail_unix.c line 212:
26 | Condition((initgroups(vju_user, vju_gid)) == 0) not true.
27 | errno = 1 (Operation not permitted)
28 | Running VCC-compiler failed, signal 6
29 | VCL compilation failed
30 | EXPECTED_ERROR
31 | exit 0;
32 | fi
33 |
34 | if [ ! `which docker` ]
35 | then
36 | exit 1;
37 | fi
38 |
39 | TEMP_FILE=$(mktemp)
40 |
41 | docker run --platform linux/amd64 --rm varnish:6.0.10 -F 2>&1 | cat - > $TEMP_FILE &
42 |
43 | sleep 10
44 |
45 | kill %1 || true
46 |
47 | cat $TEMP_FILE | grep "Operation not permitted" > /dev/null
48 |
49 | if [ "$?" = "0" ]
50 | then
51 | rm $TEMP_FILE
52 | exit 1;
53 | fi
54 |
55 | rm $TEMP_FILE
56 |
--------------------------------------------------------------------------------
/setups/podman-m1.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | if [ ! `which brew` ]
6 | then
7 | echo "Install brew"
8 |
9 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
10 | echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.profile
11 | eval "$(/opt/homebrew/bin/brew shellenv)"
12 | else
13 | echo "Skip brew, because already available"
14 | fi
15 |
16 | if [ ! `which podman` ]
17 | then
18 | echo "Install podman"
19 | brew install podman
20 | else
21 | echo "Skip podman, because already available"
22 | fi
23 |
24 | echo "upgrade podman version (if available)"
25 | brew upgrade podman
26 |
27 | IS_PODMAN_MACHINE_RUNNING=`podman machine list 2>&1 | grep "podman-machine-default" || true`
28 | if [ "$IS_PODMAN_MACHINE_RUNNING" ]
29 | then
30 | echo "Skip initializing of podman machine, because already initialized"
31 | else
32 | echo "Initialize podman machine vm"
33 | podman machine init --cpus 4 --memory 8192
34 | fi
35 |
36 | IS_PODMAN_MACHINE_NOT_RUNNING=`podman system info 2>&1 | grep "podman machine start" || true`
37 | if [ "$IS_PODMAN_MACHINE_NOT_RUNNING" ]
38 | then
39 | echo "Start podman machine vm"
40 | podman machine start
41 | else
42 | echo "Skip starting of podman machine, because already running"
43 | fi
44 |
45 | IS_DOCKER_CLI_ALREADY_PODMAN=`docker help | grep "URL to access Podman service" || true`
46 | if [ "$IS_DOCKER_CLI_ALREADY_PODMAN" ]
47 | then
48 | echo "Skip symlinking podman as docker cli, because is already podman"
49 | else
50 | echo "Symlink /usr/local/bin/docker to `which podman`"
51 | rm /usr/local/bin/docker
52 | ln -s `which podman` /usr/local/bin/docker
53 | fi
--------------------------------------------------------------------------------
/setups/colima-m1.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | if [ ! `which brew` ]
6 | then
7 | echo "Install brew"
8 |
9 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
10 | echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.profile
11 | eval "$(/opt/homebrew/bin/brew shellenv)"
12 | else
13 | echo "Skip brew, because already available"
14 | fi
15 |
16 | if [ ! `which docker` ]
17 | then
18 | echo "Install docker"
19 | brew install docker
20 | else
21 | echo "Skip docker (cli) install, because already available"
22 | fi
23 |
24 | if [ ! `which colima` ]
25 | then
26 | echo "Install colima"
27 | brew install colima
28 | else
29 | echo "Skip colima install, because already available"
30 | fi
31 |
32 | if [ ! `which docker-compose` ]
33 | then
34 | echo "Install docker-compose"
35 | brew install docker-compose
36 | else
37 | echo "Skip docker-compose install, because already available"
38 | fi
39 |
40 | echo "perform colima, docker and docker-compose upgrade (if available)"
41 | brew upgrade colima docker docker-compose
42 |
43 | IS_COLIMA_NOT_RUNNING=`colima status 2>&1 | grep "not running" || true`
44 | if [ "$IS_COLIMA_NOT_RUNNING" ]
45 | then
46 | echo "Start colima vm"
47 | colima start --runtime docker --cpu 4 --memory 8
48 | else
49 | echo "Skip starting of colima vm, because already running"
50 | fi
51 |
52 | IS_COLIMA_AMD64_EMULATOR_RUNNING=`docker run --privileged --rm tonistiigi/binfmt | grep linux/amd64 || true`
53 | if [ "$IS_COLIMA_AMD64_EMULATOR_RUNNING" ]
54 | then
55 | echo "Skip starting of amd64 emulator, because already running"
56 | else
57 | echo "Start amd64 emulator in docker"
58 | docker run --privileged --rm tonistiigi/binfmt --install amd64
59 | fi
--------------------------------------------------------------------------------
/tests/t3.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "old stern amd64 image "
6 | exit 0
7 | fi
8 |
9 | if [ "$1" = "expected" ]
10 | then
11 | echo "Expected Success: \n"
12 | cat <<-'EXPECTED_SUCCESS'
13 | version: 1.11.0
14 | EXPECTED_SUCCESS
15 | echo "\nExpected Error: \n"
16 | cat <<-'EXPECTED_ERROR'
17 | runtime: failed to create new OS thread (have 2 already; errno=22)
18 | fatal error: newosproc
19 |
20 | runtime stack:
21 | runtime.throw(0x116441c, 0x9)
22 | /usr/local/go/src/runtime/panic.go:596 +0x95
23 | runtime.newosproc(0xc420022000, 0xc420032000)
24 | /usr/local/go/src/runtime/os_linux.go:163 +0x18c
25 | runtime.newm(0x11e0148, 0x0)
26 | /usr/local/go/src/runtime/proc.go:1628 +0x137
27 | runtime.main.func1()
28 | /usr/local/go/src/runtime/proc.go:126 +0x36
29 | runtime.systemstack(0x18ba900)
30 | /usr/local/go/src/runtime/asm_amd64.s:327 +0x79
31 | runtime.mstart()
32 | /usr/local/go/src/runtime/proc.go:1132
33 |
34 | goroutine 1 [running]:
35 | runtime.systemstack_switch()
36 | /usr/local/go/src/runtime/asm_amd64.s:281 fp=0xc42001e788 sp=0xc42001e780
37 | runtime.main()
38 | /usr/local/go/src/runtime/proc.go:127 +0x6c fp=0xc42001e7e0 sp=0xc42001e788
39 | runtime.goexit()
40 | /usr/local/go/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc42001e7e8 sp=0xc42001e7e0
41 | EXPECTED_ERROR
42 | exit 0;
43 | fi
44 |
45 | if [ ! `which docker` ]
46 | then
47 | exit 1;
48 | fi
49 |
50 | docker run --platform linux/amd64 --rm alpine:latest sh -c 'cd /tmp/ && wget https://github.com/wercker/stern/releases/download/1.11.0/stern_linux_amd64 -q && chmod +x stern_linux_amd64 && ./stern_linux_amd64 --version' 2>&1 | grep 'failed to create new OS thread' > /dev/null
51 |
52 | if [ "$?" = "0" ]
53 | then
54 | exit 1;
55 | fi
--------------------------------------------------------------------------------
/tests/t4.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ "$1" = "description" ]
4 | then
5 | echo "current stern amd64 image "
6 | exit 0
7 | fi
8 |
9 | if [ "$1" = "expected" ]
10 | then
11 | echo "Expected Success: \n"
12 | cat <<-'EXPECTED_SUCCESS'
13 | version: 1.21.0
14 | EXPECTED_SUCCESS
15 | echo "\nExpected Error: \n"
16 | cat <<-'EXPECTED_ERROR'
17 | runtime: failed to create new OS thread (have 2 already; errno=22)
18 | fatal error: newosproc
19 |
20 | runtime stack:
21 | runtime.throw(0x116441c, 0x9)
22 | /usr/local/go/src/runtime/panic.go:596 +0x95
23 | runtime.newosproc(0xc420022000, 0xc420032000)
24 | /usr/local/go/src/runtime/os_linux.go:163 +0x18c
25 | runtime.newm(0x11e0148, 0x0)
26 | /usr/local/go/src/runtime/proc.go:1628 +0x137
27 | runtime.main.func1()
28 | /usr/local/go/src/runtime/proc.go:126 +0x36
29 | runtime.systemstack(0x18ba900)
30 | /usr/local/go/src/runtime/asm_amd64.s:327 +0x79
31 | runtime.mstart()
32 | /usr/local/go/src/runtime/proc.go:1132
33 |
34 | goroutine 1 [running]:
35 | runtime.systemstack_switch()
36 | /usr/local/go/src/runtime/asm_amd64.s:281 fp=0xc42001e788 sp=0xc42001e780
37 | runtime.main()
38 | /usr/local/go/src/runtime/proc.go:127 +0x6c fp=0xc42001e7e0 sp=0xc42001e788
39 | runtime.goexit()
40 | /usr/local/go/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc42001e7e8 sp=0xc42001e7e0
41 | EXPECTED_ERROR
42 | exit 0;
43 | fi
44 |
45 | if [ ! `which docker` ]
46 | then
47 | exit 1;
48 | fi
49 |
50 | docker run --platform linux/amd64 --rm alpine:latest sh -c 'cd /tmp && wget -q https://github.com/stern/stern/releases/download/v1.21.0/stern_1.21.0_linux_amd64.tar.gz && tar -zxf stern_1.21.0_linux_amd64.tar.gz && ./stern --version' 2>&1 | grep 'failed to create new OS thread' > /dev/null
51 |
52 | if [ "$?" = "0" ]
53 | then
54 | exit 1;
55 | fi
--------------------------------------------------------------------------------
/run-tests.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | if [ `which podman` ]
4 | then
5 | echo "--Podman-Info-----------------------------------------------------"
6 | podman info
7 | fi
8 |
9 | if [ `which colima` ]
10 | then
11 | echo "--Colima-Version--------------------------------------------------"
12 | colima version
13 | echo "--Colima-Status---------------------------------------------------"
14 | colima status
15 | fi
16 |
17 | if [ `which limactl` ]
18 | then
19 | echo "--Limactl-Version-------------------------------------------------"
20 | limactl --version
21 | echo "--Limactl-Info----------------------------------------------------"
22 | limactl info
23 | fi
24 |
25 | if [ `which docker` ]
26 | then
27 | echo "--Docker----------------------------------------------------------"
28 | docker version
29 |
30 | echo "--binfmt----------------------------------------------------------"
31 | docker run --privileged --rm tonistiigi/binfmt
32 | fi
33 |
34 | if [ `which docker-compose` ]
35 | then
36 | echo "--Docker-Compose--------------------------------------------------"
37 | docker-compose version
38 | fi
39 |
40 | if [ `which lsb_release` ]
41 | then
42 | echo "--Lsb-Release-----------------------------------------------------"
43 | lsb_release -a
44 | fi
45 |
46 | if [ `which sw_vers` ]
47 | then
48 | echo "--Sw-Vers---------------------------------------------------------"
49 | sw_vers
50 | fi
51 |
52 | echo "--uname-------------------------------------------------------------"
53 | uname -a
54 |
55 | echo "--------------------------------------------------------------------"
56 | echo "Run tests: "
57 |
58 | cd tests/
59 |
60 | ls | grep '.sh' | while read file
61 | do
62 | sh ./$file
63 | if [ "$?" = "0" ]
64 | then
65 | echo " - $file: ✅ OK"
66 | else
67 | echo " - $file: 🛑 FAILED"
68 | fi
69 | done
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # state-of-docker-on-m1
2 |
3 | Since making docker desktop unavailable for free to larger organizations, there are multiple alternatives people might
4 | evaluate. But there is also a difference between Apple M1 and Apple Intel devices. Thus this little repository provides
5 | information of the state of how which setup compares in terms of working.
6 |
7 | ## Results
8 |
9 | Last update: 2022-08-12 (rancher desktopd: 2025-09-02)
10 |
11 | | Test ID | Summary | [rancher-desktop-dockerd on m1](./setups/rancher-desktop-dockerd-m1.md) | [colima](./setups/colima-m1.md) | [podman-m1](./setups/podman-m1.md) | [docker-desktop-m1](./setups/docker-desktop-m1.md) | [minikube-hyperkit-m1](./setups/minikube-hyperkit-m1.md) | [minikube-docker-desktop-m1](./setups/minikube-docker-desktop-m1.md) | [docker-desktop on intel](./setups/docker-desktop-intel.md) | [ubuntu-amd64](./setups/ubuntu-amd64.md) |
12 | |---------------------|------------------------------|-----------------------------------------------------------------------|---------------------------------|-----------------------------------|---------------------------------------------------|----------------------------------------------------------|---------------------------------------------------------------------|-------------------------------------------------------------|------------------------------------------|
13 | | | | v1.19.3 | v0.4.4 | v4.2.0 | v20.10.17 | v1.25.1 | v1.16.1 | v20.10.17 | v20.10.17 |
14 | | [t1](./tests/t1.sh) | trusty openresty amd64 image | 🛑 | 🛑 | ❌ | 🛑 | ❌ | 🛑 | ✅ | ✅ |
15 | | [t2](./tests/t2.sh) | alpine openresty amd64 image | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ |
16 | | [t3](./tests/t3.sh) | old stern amd64 image | ✅ | 🛑 | ✅ | 🛑 | ❌ | ✅ | ✅ | ✅ |
17 | | [t4](./tests/t4.sh) | current stern amd64 image | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
18 | | [t5](./tests/t5.sh) | varnish 6.0.10 image | ✅ | 🛑 | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
19 | | [t6](./tests/t6.sh) | applet not found regression | ✅ | | | | ❌ | | | ✅ |
20 |
21 | Changes:
22 |
23 | - rancher desktop from v1.8.1 to v1.19.3 fixed t5 on m1
24 | - rancher desktop from v1.5.1 to v1.6.2 fixed t3 on m1
25 | - rancher desktop from v1.5.0 to v1.5.1, broke t3 and t5, but fixed t6 (see [rancher-desktop#2659](https://github.com/rancher-sandbox/rancher-desktop/issues/2659))
26 | - rancher desktop from v1.1.1 to v1.5.0 fixed t3 and t5 on m1 but created t6
27 | - podman from v3.4.4 to v4.2.0 t1+t2 openresty freezes now (also bad) and does not error (like before)
28 |
29 | Hints:
30 |
31 | 1. [minikube-hyperkit-m1](./setups/minikube-hyperkit-m1.md) does look so bad, because hyperkit is not supported on arm at all and will never be (see [moby/hyperkit#310](https://github.com/moby/hyperkit/issues/310) for more information).
32 |
33 | ## Setups
34 |
35 | * M1 Mac Setups (on a MacBook Pro (16", 2021), Chip: `Apple M1 Pro`)
36 | * lima vm based:
37 | * ⚠️ [rancher-desktop-dockerd on m1](./setups/rancher-desktop-dockerd-m1.md)
38 | * ⚠️ [colima on m1](./setups/colima-m1.md)
39 | * qemu vm based:
40 | * ⚠️ [podman-m1](./setups/podman-m1.md)
41 | * docker desktop based:
42 | * ⚠️ [docker-desktop on m1](./setups/docker-desktop-m1.md)
43 | * ⚠️ [minikube-docker-desktop on m1](./setups/minikube-docker-desktop-m1.md)
44 | * hyperkit based:
45 | * ❌ [minikube-hyperkit on m1](./setups/minikube-hyperkit-m1.md) (unsupported because of [moby/hyperkit#310](https://github.com/moby/hyperkit/issues/310))
46 | * Intel Mac Setups (on a MacBook Pro (16", 2019), Chip: `Intel Core i9`)
47 | * ✅ [docker-desktop on intel](./setups/docker-desktop-intel.md)
48 | * Non Mac Setup (for comparison on Ubuntu x86_64):
49 | * ✅ [ubuntu-amd64](./setups/ubuntu-amd64.md)
50 |
51 | ## License
52 |
53 | This work is copyright by DracoBlue (http://dracoblue.net) and licensed under the terms of MIT License.
54 |
--------------------------------------------------------------------------------