I’m in the process of trying out Docker on an industrial embedded computer that runs a ARMv5 CPU. I see that Debian Jessie ships a docker.io package for armel in their “backports” repository and I have just ported Linux kernel 4.9.26 to the device and partitioned the SD card with btrfs.
Note that this is ARMv5 not ARMv6 or v7, armhfwill not work. Moving to armhf would be nice, if someone knows of a sub-AU$150 armhf machine that is certified to work at 85°C, I’m all ears, but for now, this is what we have to work with.
So far so good. I found I had to enable a number of kernel options, but eventually, got Docker daemon to start. However, it won’t run an image:
root@ts7670:~# docker info
Containers: 0
Images: 0
Storage Driver: btrfs
Build Version: Btrfs v3.17
Library Version: 101
Execution Driver: native-0.2
Kernel Version: 4.9.26-ts7670-20170504-00031-g9226da7
Operating System: Debian GNU/Linux 8 (jessie)
CPUs: 1
Total Memory: 109 MiB
Name: ts7670
ID: JJC6:POS3:3YZG:N7VT:TZMC:YMEJ:SC5K:N5MT:A6VA:J6VJ:6P3O:23UK
root@ts7670:~# docker run --rm -ti armel/debian /bin/bash
[ 2822.312277] docker0: port 1(veth6e9fe58) entered blocking state
[ 2822.318467] docker0: port 1(veth6e9fe58) entered disabled state
[ 2822.530803] device veth6e9fe58 entered promiscuous mode
[ 2822.605129] IPv6: ADDRCONF(NETDEV_UP): veth6e9fe58: link is not ready
[ 2824.411578] eth0: renamed from vetha42adde
[ 2824.562378] IPv6: ADDRCONF(NETDEV_CHANGE): veth6e9fe58: link becomes ready
[ 2824.570315] docker0: port 1(veth6e9fe58) entered blocking state
[ 2824.576484] docker0: port 1(veth6e9fe58) entered forwarding state
Timestamp: [ 2825.559813] docker0: port 1(veth6e9fe58) entered disabled state
[ 2825.661789] device veth6e9fe58 left promiscuous mode
[ 2825.667049] docker0: port 1(veth6e9fe58) entered disabled state
FATA[0020] Error response from daemon: Cannot start container 6b728b7f4dbaf49ee894e18e80d90d4bd45fcec65a2f5627de25a9e6837258eb: [8] System error: no such device
Now, clearly I’ve missed something… there is a “device” missing somewhere. Question is, which device?
As an experiment, I’m trying out Debian Sid now to see if its newer docker.io binary works, but if anyone has seen this message and knows how to fix it, I’m all ears.
Well, trying Debian Sid at this time… the docker.io package there is completely broken in that it conflicts with the versions of runc and containerd also available on Sid.
Maybe I might try that a little later once Debian ship a newer docker.io… in the meantime I’ve grabbed a Gentoo stage3 tarball and unpacked that as the root, I can experiment with building Docker easier that way. That will at least tell me if Docker can work on this device.
bash-4.3# docker run --rm -ti armel/debian /bin/bash
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:270: sending config to init process caused \"write parent: broken pipe\"".
ERRO[0152] error getting events from daemon: context canceled
Definitely unfit for purpose. Looks like we won’t be bothering with Docker at the device level. The concepts looked good, but it just doesn’t live up to expectations. The overheads are too high and it introduces too many complexities for it to be practical as a means of managing software on an embedded device.