carlosperate / docker-qemu-rpi-os

Docker images with Raspberry Pi OS running on QEMU
MIT License
28 stars 5 forks source link

Docker support? #6

Open kimb opened 5 months ago

kimb commented 5 months ago

I'm trying to use the emulated RPi as a test target for an ansible script that installs Docker and then builds and starts Docker containers.

Starting the qemu RPi with the following docker-compose.yml:

services:
  qemu-raspberry:
    image: ghcr.io/carlosperate/qemu-rpi-os-lite:bullseye-latest
    ports:
      - "5022:5022"

Installing Docker using curl -fsSL https://get.docker.com -o get-docker.sh | sh works, but trying to start Docker fails with:

root@raspberrypi:~# systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

journalctl --no-pager -l reports the following:

Mar 30 00:28:24 raspberrypi systemd[1]: Starting Docker Application Container Engine...
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.024301272Z" level=info msg="Starting up"
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.498054465Z" level=error msg="failed to mount overlay: no such device" storage-driver=overlay2
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.502143603Z" level=error msg="exec: \"fuse-overlayfs\": executable file not found in $PATH" storage-driver=fuse-overlayfs
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.511974230Z" level=info msg="Loading containers: start."
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.559388679Z" level=warning msg="Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module bridge not found in directory /lib/modules/5.10.205\nmodprobe: WARNING: Module br_netfilter not found in directory /lib/modules/5.10.205\n, error: exit status 1"
Mar 30 00:28:26 raspberrypi dockerd[4136]: time="2024-03-30T00:28:26.677670800Z" level=info msg="unable to detect if iptables supports xlock: 'iptables --wait -L -n': `iptables/1.8.7 Failed to initialize nft: Protocol not supported`" error="exit status 1"
Mar 30 00:28:27 raspberrypi dockerd[4136]: time="2024-03-30T00:28:27.740396589Z" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
Mar 30 00:28:27 raspberrypi dockerd[4136]: failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables/1.8.7 Failed to initialize nft: Protocol not supported
Mar 30 00:28:27 raspberrypi dockerd[4136]:  (exit status 1)
Mar 30 00:28:27 raspberrypi systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Mar 30 00:28:27 raspberrypi systemd[1]: docker.service: Failed with result 'exit-code'.
Mar 30 00:28:27 raspberrypi systemd[1]: Failed to start Docker Application Container Engine.

msg="failed to mount overlay: no such device" storage-driver=overlay2

Kernel missing the overlay2 driver? Installaing apt install fuse-overlayfs helps a bit. But it still fails with:

Mar 30 00:59:59 raspberrypi systemd[1]: Starting Docker Application Container Engine...
Mar 30 01:00:00 raspberrypi dockerd[5159]: time="2024-03-30T01:00:00.983010274Z" level=info msg="Starting up"
Mar 30 01:00:01 raspberrypi dockerd[5159]: time="2024-03-30T01:00:01.406557494Z" level=info msg="[graphdriver] using prior storage driver: fuse-overlayfs"
Mar 30 01:00:01 raspberrypi dockerd[5159]: time="2024-03-30T01:00:01.417872808Z" level=info msg="Loading containers: start."
Mar 30 01:00:01 raspberrypi dockerd[5159]: time="2024-03-30T01:00:01.472845803Z" level=warning msg="Running modprobe bridge br_netfilter failed with message: modprobe: WARNING: Module bridge not found in directory /lib/modules/5.10.205\nmodprobe: WARNING: Module br_netfilter not found in directory /lib/modules/5.10.205\n, error: exit status 1"
Mar 30 01:00:01 raspberrypi dockerd[5159]: time="2024-03-30T01:00:01.589480991Z" level=info msg="unable to detect if iptables supports xlock: 'iptables --wait -L -n': `iptables/1.8.7 Failed to initialize nft: Protocol not supported`" error="exit status 1"
Mar 30 01:00:02 raspberrypi dockerd[5159]: time="2024-03-30T01:00:02.693942587Z" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby
Mar 30 01:00:02 raspberrypi dockerd[5159]: failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables/1.8.7 Failed to initialize nft: Protocol not supported
Mar 30 01:00:02 raspberrypi dockerd[5159]:  (exit status 1)
Mar 30 01:00:02 raspberrypi systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE

failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables/1.8.7 Failed to initialize nft: Protocol not supported

So it seems bridge and/or nft protocol support is missing. This might be because modules are missing for the kernel version (but do exist for 6.1.21)?

root@raspberrypi:~# uname -a
Linux raspberrypi 5.10.205 #1 SMP Mon Jan 1 18:34:33 UTC 2024 armv7l GNU/Linux
root@raspberrypi:~# ls /lib/modules/
6.1.21+  6.1.21-v7+  6.1.21-v7l+  6.1.21-v8+
root@raspberrypi:~# find  /usr/lib/modules/ -name *br_netfilter*
/usr/lib/modules/6.1.21+/kernel/net/bridge/br_netfilter.ko.xz
/usr/lib/modules/6.1.21-v7l+/kernel/net/bridge/br_netfilter.ko.xz
/usr/lib/modules/6.1.21-v8+/kernel/net/bridge/br_netfilter.ko.xz
/usr/lib/modules/6.1.21-v7+/kernel/net/bridge/br_netfilter.ko.xz
kimb commented 5 months ago

Trying to use buster:

services:
  qemu-raspberry-buster:
    image: ghcr.io/carlosperate/qemu-rpi-os-lite:buster-latest
    ports:
      - "5022:5022"

Also fails to start Docker:

Apr 07 14:39:22 raspberrypi systemd[1]: Starting Docker Socket for the API.
Apr 07 14:39:23 raspberrypi systemd[1]: Listening on Docker Socket for the API.
Apr 07 14:39:23 raspberrypi systemd[1]: Starting Docker Application Container Engine...
Apr 07 14:39:30 raspberrypi dockerd[6064]: time="2024-04-07T14:39:30.059172978+01:00" level=info msg="Starting up"
Apr 07 14:39:32 raspberrypi dockerd[6064]: failed to start daemon: Devices cgroup isn't mounted
Apr 07 14:39:33 raspberrypi systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Apr 07 14:39:33 raspberrypi systemd[1]: docker.service: Failed with result 'exit-code'.
Apr 07 14:39:33 raspberrypi systemd[1]: Failed to start Docker Application Container Engine.