Trying to run docker on armhf, "Operation not supported" #30037

Closed
CoruNethron opened this Issue Jan 10, 2017 · 8 comments

Projects

None yet

5 participants

@CoruNethron

Description

Hello, i'm trying to run Docker on allwinner A10 SOC within Cubieboard HW. I compiled linux kernel v4.9.0, and enabled all available options, that docker requires, except for few.

Using this script: https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh i'm checking what dependencies are missing, while compiling kernel. Here is the result after running script: kernel-config.txt

Missing modules marked "missing". Seems, that DEVPTS_MULTIPLE_INSTANCES is no more available in 4.9.0 kernel and other missing elements is not supported on arm architecture. I was not touch aufs support.

uname -a: uname.txt
Docker log: docker-log.txt
docker info: docker-info.txt
lsmod: lsmod.txt
mount: mount.txt
ifconfig: ifconfig.txt

Steps to reproduce the issue:

  1. edit /etc/apk/repositories - uncomment community repos
  2. apk add docker
  3. service docker start
  4. docker run -it armhf/alpine sh

Describe the results you received:
docker: Error response from daemon: operation not supported.

Describe the results you expected:
Container running.

Additional information you deem important (e.g. issue happens only occasionally):
I may include the Dockerfile, which builds u-boot, patches and compiles linux-kernel, adds Alpine Linux rootFS and makes sdcard image, ready to burn onto SD if someone want to reproduce issue with same hardware (Cubietech Cubieboard 1 / A10 Allwinner SoC)

Output of docker version:

Client:
Version: 1.12.5
API: 1.24
Go: go1.7.3
Git: v1.12.5
Built: Jan 9 2017
OS/arch: linux/arm

Server: same

Output of docker info:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 1.12.5
Storage Driver: overlay
 Backing Filesystem: tmpfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: null host bridge overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 4.9.0
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: armv7l
CPUs: 1
Total Memory: 996.5 MiB
Name: aldock
ID: SAAM:KJKB:SGC3:Z7SM:OKLK:2S4Y:OQEC:T6XX:6L6J:KRUV:XWV6:H7UB
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

Additional environment details (AWS, VirtualBox, physical, etc.):
Cubietech Cubieboard 1 on A10 Alwinner SoC hardware
Linux Kernel 4.9.0, manually customized
Alpine linux 3.5.0
Docker downloaded from community repositories, not yet available in main repo (not considered stable on Alpine ?)

@justincormack
Member
justincormack commented Jan 10, 2017 edited

The PTS multiple instances check is fixed in master I thought https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh but you cannot disable it in 4.9, so it doesn't matter.

The other missing things probably don't matter, eg Arm 32 does not generally use huge pages.

@justincormack
Member

The build you are testing is the Alpine arm build, which I haven't tested recently on arm, and it is not an official build. @ncopa may well have tested it though.

You could try our static binary build of master from here https://master.dockerproject.org/linux/arm/docker-1.14.0-dev.tgz install instructions here https://docs.docker.com/engine/installation/binaries/ and see if it is any different.

Also the output of strace -f of the docker-containerd process would help to see what syscall it is failing on.

@CoruNethron
CoruNethron commented Jan 13, 2017 edited

I've tryed to use provided binary, as described in instruction. Seems, that there is no docker daemon, but only docker client in that archive.
So, when i try to run 1.14 client along with 1.12.5 daemon - the result is the same.
Also i collected some strace logs, launched against dockerd process (not against docker-containerd for now).
Logs: strace-dockerd.txt
Maybe string 734 contains some useful info.

Possibly related issue: docker doesn't unpack local tarball with file file capabilities/xattr when using ADD in Dockerfile

@alexellis
Contributor

Hi @CoruNethron you may have considered this already, but have you thought about building from source on the device? If you enable a swap-file you may be able to complete a build (for instance you can even build on a 512mb Pi Zero).

It may get you further along while waiting for more info.

I haven't tried Alpine Linux as the host OS on an ARM device but have a few variations with Ubuntu / Raspbian / Arch Linux. If you have a spare SD card could you try one of those alternatives too?

@CoruNethron

In november i've tryed to build Docker from source under CentOS 7, on the same device. But i'm very unfamiliar with Go compiler and just unable to setup environment and finish. I will try some other OS, and maybe CentOS again in next days.
Also, offtopic, but i have some troubles with Alpine X86_64 + Docker. Many apps / containers ends up with Segfault. Possibly because of musl c lib instead of glibc.

@CoruNethron

Probably the reason is, that tmpFS does't support xattr.
I'll investigate further.

@CoruNethron

After CONFIG_TMPFS_XATTR and CONFIG_TMPFS_POSIX_ACL flags switch to [=y] (before compiling kernel) i finally can run containers. Maybe better for me will be to use persistent storage, but the root cause was extended attributes not available for tmpFS with my kernel configuration.
For now i postpone any actions with other distributions. Thanks for all helpful recomendations.

@CoruNethron

Closed, because issue resolved by changing my kernel configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment