Docker on raspberrypi3

i’m tryng to run a docker version of cartodb on my raspberrypi3
with this command
docker run -d -p 3000:3000 -p 8080:8080 -p 8181:8181 sverhoeven/cartodb

all downloads are ok
but i recieve this error:
WARNING: Your kernel does not support memory swappiness capabilities, memory swappiness discarded.
0e7e63c7483395d0d27cfb1d92feba8edea685b67e1a566fe12a44a684f421d4
Error
response from daemon: Cannot start container
0e7e63c7483395d0d27cfb1d92feba8edea685b67e1a566fe12a44a684f421d4: [8]
System error: exec format error
pi@raspberrypi:~/Desktop/cartodb/docker-cartodb $ docker run -d -p 3000:3000 -p 8080:8080 -p 8181:8181 sverhoeven/cartodb
WARNING: Your kernel does not support memory swappiness capabilities, memory swappiness discarded.
004898a491b37d66d351cd1feb301559d4adc51e293fca7f74742694cda0e7c2
Error
response from daemon: Cannot start container
004898a491b37d66d351cd1feb301559d4adc51e293fca7f74742694cda0e7c2: [8]
System error: exec format error

other infos on my docker:

$ sudo docker info
Containers: 5
Images: 69
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.1.19-v7+
Operating System: Raspbian GNU/Linux 8 (jessie)
CPUs: 4
Total Memory: 925.8 MiB
Name: raspberrypi
ID: 3YYC:P6UC:VQIT:ZBVG:EKBN:B6Y2:QEOS:QNPO:D3KM:M5QO:4LRD:FE3O
Debug mode (server): true
File Descriptors: 12
Goroutines: 22
System Time: 2016-04-18T20:29:58.855984247Z
EventsListeners: 0
Init SHA1: 96cfebcba660bb855cca9d1d6af72fef27a5e953
Init Path: /usr/lib/docker/dockerinit
Docker Root Dir: /var/lib/docker
WARNING: No memory limit support
WARNING: No swap limit support

$ docker version
Client:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79-dirty
Built: Thu Aug 13 07:53:24 UTC 2015
OS/Arch: linux/arm

Server:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79-dirty
Built: Thu Aug 13 07:53:24 UTC 2015
OS/Arch: linux/arm

This is what I’d expect to see when trying to run a binary that doesn’t match the architecture of my current CPU.

Docker isn’t virtualization, so if you are running an arm version of docker, you’ll have to run images that have arm binaries inside them.

Cheers!

It’s totally doable.

There are a few arm binaries on the docker hub. You can search for ‘arm’ or ‘raspbian’ and get a bunch of results.

I have used some of the hypriot images while playing with docker on my pi: https://hub.docker.com/u/hypriot/

Basically, if you have a Dockerfile, you can change the FROM to be a base image that matches your architecture. I remember porting a FROM ubuntu image to a raspbian base image a long time ago. since raspbian and ubuntu are both debian descendants, it wasn’t too hard.

So the problem is not in the docker sverhoeven/cartodb

so i need to “port” that docker in arm version so i can run on raspberrypi3?

Can you give me some link to learn how to change that docker to work on rpi3?

There isn’t really a specific tutorial for it. It’s on par with “porting” an image FROM ubuntu to FROM debian– they are different base images, so you might need to change some of the other instructions. Another more extreme example would be “porting” a FROM centos image to a FROM debian image. In that case, the debian image won’t have yum installed, so you’d have to figure out the equivalent apt-get package names, etc.

It really isn’t much different to “port” an image to a base image that just happens to be built for another architecture. Open up the Dockerfile, change the base image, and try the docker build command. tweak and fix until it works.

As Suggested to me from Govinda Fichtner on Gitter
i’ve wget the github of cartodb-docker in my pi@raspberrypi:~/Desktop/cartodb/docker-cartodb

Then i edited the Dockerfile
changing FROM ubuntu:14.04 into FROM resin/rpi-raspbian:jessie

then i try:
pi@raspberrypi:~/Desktop/cartodb/docker-cartodb $ docker build -t=“sverhoeven/cartodb” ./

but:

Sending build context to Docker daemon 161.8 kB
Step 0 : FROM resin/rpi-raspbian:jessie
—> f2c299e4a1a3
Step 1 : MAINTAINER Nico Aliotta aa@gmail.com
—> Using cache
—> 0cd7d4d35d0c
Step 2 : ENV DEBIAN_FRONTEND noninteractive
—> Running in bcf23ca4d2c9
—> bdc9b85f2910
Removing intermediate container bcf23ca4d2c9
Step 3 : RUN dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8
—> Running in 771ca5cea5fe
dpkg-query: package ‘locales’ is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
/usr/sbin/dpkg-reconfigure: locales is not installed
The command ‘/bin/sh -c dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8’ returned a non-zero code: 1

You’ll probably need to apt-get install that package. The raspbian image probably doesn’t have it installed already, while the ubuntu image probably does.

Thx

no i’m
sudo apt-get install locales from pi

but i can add at the end on Dockerfile if it will work?

`The following packages will be upgraded:
locales
1 upgraded, 0 newly installed, 0 to remove and 65 not upgraded.
Need to get 3,945 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main locales all 2.19-18+deb8u4 [3,945 kB]
Fetched 3,945 kB in 13s (299 kB/s)
Preconfiguring packages …
(Reading database … 135324 files and directories currently installed.)
Preparing to unpack …/locales_2.19-18+deb8u4_all.deb …
Unpacking locales (2.19-18+deb8u4) over (2.19-18+deb8u3) …
Processing triggers for man-db (2.7.0.2-5) …
Setting up locales (2.19-18+deb8u4) …
Generating locales (this might take a while)…
en_US.UTF-8… done
Generation complete.

but same error of before:

Step 3 : RUN dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8
—> Running in 33a4c5604885
dpkg-query: package ‘locales’ is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
/usr/sbin/dpkg-reconfigure: locales is not installed
The command ‘/bin/sh -c dpkg-reconfigure locales && locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8’ returned a non-zero code: 1

`

I don’t know enough about raspbian to say for sure what is going awry. Treat it like you were running it not inside a docker build and diagnose it that way.

now i’ve installed ubuntu mate 16.04 for rpi

this is docker info:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 3
Server Version: 1.10.3
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: host bridge null
Kernel Version: 4.1.19-v7+
Operating System: Ubuntu 16.04 LTS
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 925.8 MiB
Name: otm-desktop
ID: TL67:INGS:VSYG:YHEQ:W3MP:NRV4:M2TX:UX6N:T3DB:JOYS:N3HS:DQAT
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support

how i’ve to change my dockerfile? in order to run it