Support for 64bit docker containers

Is it possible to use 64-bit docker container images on the Vero 4K+?

From what I can tell, the kernel is already 64-bit, but images pulled are for armhf

Specifically, looking for resolve this announcement End of an Arch | LinuxServer.io and continue to receive image updates

You should be able to run arm64 containers on Pi 4 and Vero 4K/4K+

That’s good to hear Sam.

That said, it’s proving to be difficult. It seems like it’s being picked up as arm/v7 and not arm/v8

Below is some outputs from different commands trying to triage this

System commands

osmc@osmc:~$ uname -m
aarch64
osmc@osmc:~$ uname -a
Linux osmc 4.9.269-16-osmc #1 SMP PREEMPT Tue Nov 1 15:44:25 UTC 2022 aarch64 GNU/Linux

Docker commands

osmc@osmc:~$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  BUILDKIT PLATFORMS
default * docker                           
  default default         running 20.10.21 linux/arm/v7, linux/arm64, linux/arm/v6

I would expect to see linux/arm/v8 , but it’s not listed

Additionally, when trying to run the latest sonarr develop image

osmc@osmc:~$ docker run -d \
  --name=sonarr-demo2 \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -p 8989:8989 \
  -v /path/to/data:/config \
  --restart unless-stopped \
  linuxserver/sonarr:develop

It starts, but hangs with this log message

[custom-init] Legacy files folder /config/custom-cont-init.d is empty, deleting...

[ls.io-init] done.

    ********************************************************

    ********************************************************

    *                                                      *

    *                         !!!!                         *

    *          This Sonarr image does not support          *

    *   32 bit ARM due to lack of available OS packages    *

    *                                                      *

    *                                                      *

    ********************************************************

    ********************************************************

I’ve done some testing.

The kernel is 64-bit and even with the armhf version of Docker, you should be able to run 64-bit containers. I was able to start and enter a Debian container with:

docker run -it --security-opt seccomp:unconfined arm64v8/debian

We’ll look at 64-bit userland in the future. When I last looked at it for the Vero 4K / 4K+ in 2017, it had some serious problems.

So it just looks like you need to specify ARMv8 containers and make sure the containers have sufficient privileges (–security-opt seccomp:unconfined) to run [1] some containers

Sam

[1] 32 bit and 64 bit Debian containers have different permissions by default · Issue #20550 · moby/moby · GitHub

1 Like

Thanks for looking into this Sam.

I was able to reproduce running the ARMv8 Debian container with those extra flags.

Though looks like the linuxserver.io images have built-in startup checks which re-validate the ARM version.

For now I’ll continue to use the last ARMv7 released image. Hopeful for 64-bit userland in the future

64-bit userland is something we’ll look in to next year.

I’d try running setarch arm64 and using the arm64 version of Docker – that should be good enough.

1 Like

Hello,

I’m running into this issue when I try to update my sonarr with linuxserver.io images :

xx@x:~/docker$ docker-compose pull
Pulling sonarr ... pulling from linuxserver/sonarr

ERROR: for sonarr  no matching manifest for linux/arm/v7 in the manifest list entries
ERROR: no matching manifest for linux/arm/v7 in the manifest list entries

I thinks it’s maybe somewhat related to this thread.

Anything I can do to make it work ?

Thanks

I tried to force “arm64” with that line in my docker compose :

platform: linux/arm64

But it didn’t work.
Sonarr wasn’t able to start, the conainer was rebooting in loop.

I had to rollback to the previous version.

Have you checked that you can run arm64 containers at all as I suggested above? It would be good if you could test the helloworld container.

Hello,
Thanks for your fast answer as usual.

I’m not sure what I’m doing here ! :smiley:

I did that :

osmc@vero:~/docker$ uname -a
Linux vero 4.9.269-21-osmc #1 SMP PREEMPT Sat Jan 7 03:47:42 UTC 2023 aarch64 GNU/Linux

Then

docker run -it --security-opt seccomp:unconfined arm64v8/debian
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/arm/v7) and no specific platform was requested
root@f82b98e128fb:/
root@f82b98e128fb:/# exit

Seems to work (root@f82b98e128fb instead of osmc@vero:)

Then

osmc@vero:~/docker$ docker run --platform linux/arm64/v8 hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Status: Downloaded newer image for hello-world:latest

osmc@vero:~/docker$ docker run --platform linux/arm64/v8 hello-world
osmc@vero:~/docker$

No hello-world message, it seems to fail.

I’m not sure how I can get some logs.

I found that :

osmc@vero:~/docker$ docker events&
osmc@vero:~/docker$ docker run --platform linux/arm64/v8 hello-world
2023-03-01T08:08:07.738685162+01:00 container create 98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09 (image=hello-world, name=admiring_gates)
2023-03-01T08:08:07.746826477+01:00 container attach 98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09 (image=hello-world, name=admiring_gates)
2023-03-01T08:08:07.825923204+01:00 network connect 2c5cf6c8c1e4e8910d3eed2046da4a7de1d979cfef5acc26523daa276a405113 (container=98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09, name=bridge, type=bridge)
2023-03-01T08:08:08.897364770+01:00 container start 98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09 (image=hello-world, name=admiring_gates)
2023-03-01T08:08:09.060525648+01:00 container die 98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09 (exitCode=159, image=hello-world, name=admiring_gates)
2023-03-01T08:08:09.394372455+01:00 network disconnect 2c5cf6c8c1e4e8910d3eed2046da4a7de1d979cfef5acc26523daa276a405113 (container=98f6821b5c62f914374577ef2635174cd668e33708f30fcf51cd2600fb9c2c09, name=bridge, type=bridge)

Then I tried to start sonarr :

osmc@vero:~/docker$ docker start sonarr

But it loop on that

2023-03-01T08:16:20.543973035+01:00 network connect 1e6754a69c319e84f101d66dee115c3f404d12a90e2feed136fb00f84578938a (container=1c3a7ae79ebea0069a0b7eca8b6d3bcff621be79232e24acea2d0f6d2c78b01b, name=docker_default, type=bridge)
2023-03-01T08:16:22.093040288+01:00 container start 1c3a7ae79ebea0069a0b7eca8b6d3bcff621be79232e24acea2d0f6d2c78b01b (build_version=Linuxserver.io version:- 3.0.9.1549-ls180 Build-date:- 2023-02-28T14:44:36+01:00, com.docker.compose.config-hash=54e9cb560154db37be028aa3305bb25045b9f8e9815e8d07199f5bf8f71e1fb4, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=docker, com.docker.compose.project.config_files=docker-compose.yml, com.docker.compose.project.working_dir=/home/osmc/docker, com.docker.compose.service=sonarr, com.docker.compose.version=1.29.2, image=lscr.io/linuxserver/sonarr, maintainer=aptalca, name=sonarr, org.opencontainers.image.authors=linuxserver.io, org.opencontainers.image.created=2023-02-28T14:44:36+01:00, org.opencontainers.image.description=[Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.  , org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-sonarr, org.opencontainers.image.licenses=GPL-3.0-only, org.opencontainers.image.ref.name=90fd4c042d0d4dbc2d557a7ec6318d69c1b3df8e, org.opencontainers.image.revision=90fd4c042d0d4dbc2d557a7ec6318d69c1b3df8e, org.opencontainers.image.source=https://github.com/linuxserver/docker-sonarr, org.opencontainers.image.title=Sonarr, org.opencontainers.image.url=https://github.com/linuxserver/docker-sonarr/packages, org.opencontainers.image.vendor=linuxserver.io, org.opencontainers.image.version=3.0.9.1549-ls180)
2023-03-01T08:16:22.192181870+01:00 container die 1c3a7ae79ebea0069a0b7eca8b6d3bcff621be79232e24acea2d0f6d2c78b01b (build_version=Linuxserver.io version:- 3.0.9.1549-ls180 Build-date:- 2023-02-28T14:44:36+01:00, com.docker.compose.config-hash=54e9cb560154db37be028aa3305bb25045b9f8e9815e8d07199f5bf8f71e1fb4, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=docker, com.docker.compose.project.config_files=docker-compose.yml, com.docker.compose.project.working_dir=/home/osmc/docker, com.docker.compose.service=sonarr, com.docker.compose.version=1.29.2, exitCode=159, image=lscr.io/linuxserver/sonarr, maintainer=aptalca, name=sonarr, org.opencontainers.image.authors=linuxserver.io, org.opencontainers.image.created=2023-02-28T14:44:36+01:00, org.opencontainers.image.description=[Sonarr](https://sonarr.tv/) (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.  , org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-sonarr, org.opencontainers.image.licenses=GPL-3.0-only, org.opencontainers.image.ref.name=90fd4c042d0d4dbc2d557a7ec6318d69c1b3df8e, org.opencontainers.image.revision=90fd4c042d0d4dbc2d557a7ec6318d69c1b3df8e, org.opencontainers.image.source=https://github.com/linuxserver/docker-sonarr, org.opencontainers.image.title=Sonarr, org.opencontainers.image.url=https://github.com/linuxserver/docker-sonarr/packages, org.opencontainers.image.vendor=linuxserver.io, org.opencontainers.image.version=3.0.9.1549-ls180)
2023-03-01T08:16:22.533877435+01:00 network disconnect 1e6754a69c319e84f101d66dee115c3f404d12a90e2feed136fb00f84578938a (container=1c3a7ae79ebea0069a0b7eca8b6d3bcff621be79232e24acea2d0f6d2c78b01b, name=docker_default, type=bridge)


See Docker issues after upgrade to Bullseye - #25 by mbarnes.

If Docker’s hello world container isn’t working then something else may be the issue

Sam

I was one of the poster in the thread you linked.
The issue was that I couldn’t start any container after update, but it’s solved now.

Docker Hello World works perfectly fine in arm7 :

osmc@vero:~/docker$ docker run --platform linux/arm/v7 hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
04341b189be6: Pull complete
Digest: sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v7)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

but not in arm64

osmc@vero:~/docker$ docker run --platform linux/arm64/v8 hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
Digest: sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Status: Downloaded newer image for hello-world:latest
osmc@vero:~/docker$ docker run --platform linux/arm64/v8 hello-world
osmc@vero:~/docker$

Also Sonarr image from linuxserver.io works just fine in arm7.

But I can’t update it because arm7 is no longer supported, and arm64 doesn’t work.

What I did was to download the arm64 debs of docker and dpkg install them in dependeciy-order, since any automated script grabbed armhf on both vero4 and pi3, doing it my way is not really a good solution, since there is no autoupdate, but it works.

Check out the getdocker script, then use the url in there to download the docker-debs, I had it all documented but lost the textfile, before i could move it to my “knowledge db”.

Edit:
here is some screenshots of portainer, showing env and an image running arm64 docker:

So following joakim_s advice I desinstalled docker and reinstalled docker debian arm64.

(take these commands with a grain of salt, it took me trials and error, I’m not sure my system is stable :stuck_out_tongue: )

# Check what's installed 

apt list --installed | grep dock

# Then uninstall every docker packages installed
sudo apt-get remove  docker-ce-cli docker-compose-plugin docker-ce-rootless-extras

I then followed this guide :

I downloaded the deb files, then ran

sudo dpkg -i ./docker-ce_23.0.1-1_debian.11_bullseye_arm64.deb \
  ./docker-ce_23.0.1-1_debian.11_bullseye_arm64.deb \
  ./docker-ce-cli_23.0.1-1_debian.11_bullseye_arm64.deb \
  ./docker-buildx-plugin_0.10.2-1_debian.11_bullseye_arm64.deb \
  ./docker-compose-plugin_2.16.0-1_debian.11_bullseye_arm64.deb

#I had a library error that was fixed with this command.
#But I guess it's because I broken something earlier in my tests.
sudo apt-get --fix-broken install

Then launch docker services and hello-world :

 sudo service docker start
 sudo docker run hello-world

osmc@vero:~$  sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

It worked !

Then I updated my images to last arm64 version

docker-compose pull
docker-compose up -d

And miracle, everything is up-to-date and working.

Next few days will tell if it’s really working ahah

3 Likes

This worked perfectly, thank you.

Well, you missed to remove “containered.io.*.deb” from previous install, and didn’t reinstall it manually. You might wanna edit you post just a tiny bit, add containered.io.*.deb to your remove and reinstall instructions. Else I’m really happy that it worked for you and now another user.

1 Like

Thanks to this thread, I could finally run 64bit containers on OSMC! this became a must as some popular projects are leaving 32-bit support behind, this happened to me with frigate, a video processing tool.

The install was a bit scary as the initial install of the 64 bit packages does error out, but a --fix-broken install and then a second attempt to dpkg -i *.deb cleared things.

Hoping that at one point this year OSMC will switch to 64b userland so none of this will be needed

We will move in the near future but I don’t have a timeframe yet.