I just updated several of my boxes to Debian 10 Buster, including one virtual server I have to build and update Docker images for CI purposes.
Suddenly the containers for CentOS6 using
centos:centos6 image refused to start for no reason. It didn’t matter if I tried to run
bash (for example with
docker run -ti -u root --rm centos:centos6 /bin/bash). No error from the command
docker at all. Just the prompt again.
The exact same Docker image worked fine on my openSUSE Leap 15.1.
The key to the problem was be found at dmesg:
kernel: bash vsyscall attempted with vsyscall=none ip:ffffffffff600400 cs:33 sp:7ffc65288fb8 ax:ffffffffff600400 si:7ffc65289f81 di:0 kernel: bash: segfault at ffffffffff600400 ip ffffffffff600400 sp 00007ffc65288fb8 error 15
Fixing it is easy:
- Modify the kernel parameters: at
GRUB_CMDLINE_LINUX_DEFAULT(if for some reason you want it at recovery mode, then
This will reenable the emulation and will allow you to start CentOS6 containers (and any other containers requiring vsyscalls).
If you are using other distributions (or a different kernel) and modifying the kernel parameters, updating grub and rebooting does not help, maybe emulation was just no compiled (see this and this comments at Arch Linux bugtracker).
How to verify if that is your case will depend on your distribution and kernel.
- Check /proc/config.gz
- Check /boot/config-$(uname -r)
- Install the kernel headers and look for the
.configfile at the root of the folder where headers are.
- If you compiled on your own and options 1 and 2 are not working, look for the
.configfile at the root of the folder where the sources you used are.
And to fix it, you will need to either recompile your kernel, either install a new one with support for vsyscall emulation. But that’s out of the scope of this post.