For this blog I decided to setup a complete new server with Docker running my services (e.g. Ghost).
I was already customer at a German hoster and I decided to rent a virtual Server there. (With Ubuntu 14.04 as OS)
I installed Docker and everything seemed fine, until I tried to start the docker daemon.
The daemon failed to start with the following error message:
init_networkdriver() [...] package not installed.
After some searching I learned that my kernel didn’t have the
bridge kernel module. No problem just execute
sudo modprobe bridge, but it failed again with
Module bridge not found. And now it got interesting:
Only then I learned, that a virtual server is not a real root server. I always thought that a virtual server maybe a bit slower than a root server (dedicated server) and RAM and other resources are shared with others, but that I had full rights to do with my system whatever I want. As it turned out, there a different virtualization solutions and my virtual server was a OpenVZ virtual server. The kernel is shared between the different virtual servers and I’m not able to modify the kernel.
Then I tried a workaround described here, but it didn’t work for me. (The daemon started, but running a container resulted in a error message:
fork/exec /var/lib/docker/init/dockerinit-1.2.0: operation not permitted.)
After some more research I found some hints, that Xen virtualization didn’t suffer from the same kernel
bridge problem. I decided to rent a server at Linode and Docker is running smoothly out of the box without any extra modifications. (I didn’t dig into the details why it works, I’m just happy it does. :-))
To sum it up: I failed to run Docker (1.2.0) on a OpenVZ server, but on Xen it worked and there is really a difference between a virtual server and a root/dedicated server.
P.S.: I used Ansible to setup the server and the initial investment paid off directly after I switched ther servers. Highly recommended even for small server installations. More infos about my Ansible setup including sources here.