6

I am trying to run a CentOS Docker Image on my Arch Linux host. Running the following command returns nothing except the 139 error code:

$ docker run -ti centos:centos6 /bin/bash                                                                                                                                
[139] $  

I have the CentOS Docker image:

centos              centos6             0cbf37812bff        2 weeks ago         194MB

and a centOS container is there under the list of containers

$ docker ps -a|grep cento                                                                                                                                                
2ef0f0d7439c        centos:centos6         "/bin/bash"              5 minutes ago       Exited (139) 5 minutes ago                       elated_turing

Docker logs also returns nothing:

$ docker logs <container id>
$

I have tried using other Docker images and they work, it only seems to affect the CentOS image but I need to use centOS for my work.

6
  • What does docker logs <container> show?
    – slm
    Oct 29, 2018 at 11:55
  • @slm nothing is returned Oct 29, 2018 at 12:18
  • Can you try removing the container and then removing the image and re-downloading it again?
    – slm
    Oct 29, 2018 at 12:36
  • Also make sure SELinux is enabled - bugzilla.redhat.com/show_bug.cgi?id=1488516.
    – slm
    Oct 29, 2018 at 12:38
  • @slm SELinux isn't fully supported with Arch, and the installation process includes about 100 steps, so are you sure this will solve it? wiki.archlinux.org/index.php/… Oct 29, 2018 at 14:44

2 Answers 2

9

They were changes made on vsyscall linking in the Linux Kernel, starting with version 4.11, that caused issues with containers running Centos 6.x

2 solutions :

  • Use a 7.x Centos image
  • Try to boot the kernel with the parameter vsyscall=emulate

Example with GRUB, modify /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="vsyscall=emulate"

And then run update-grub

Example with systemd-boot, modify your conf in /boot/loader/entries and add the parameter to the options line :

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options *EXISTINGPARAMS* vsyscall=emulate
4
  • 1
    damn! that was the issue... don't know how you figured this out, but thanks a bunch, you save my day (and probably a large fraction of my night!) Sep 8, 2019 at 20:04
  • Related docs on how to add Kernel parameters: wiki.archlinux.org/index.php/Kernel_parameters#GRUB and sudo update-grub worked for me on Manjaro
    – karfau
    Dec 6, 2019 at 11:44
  • Do you have any references to the underlying issue? Jun 9, 2020 at 2:11
  • The vsyscall parameter was set to 'none' by default in 4.11, and I think the problem is with the version of glibc in Centos 6 which does not support this. You could search the kernel mailing list for the exact patch were this happened. Jun 9, 2020 at 16:03
0

The best solution is to use vsyscall=emulate as advised in the other answer, of course, but if you can't reboot the machine containing CentOS 6 container (or just a CentOS 6 installation inside a chroot, as in my case) and don't mind some open-heart surgery, you can also "upgrade" CentOS 6 to use CentOS 7 glibc version to work around the problem. Note that replacing just libc.so is not enough, you need to copy at least the following files from a CentOS 7 system to /lib64 directory: ld-2.17.so, lib{c,dl,m,pthread}-2.17.so and then update the corresponding symlinks, i.e. ld-linux-x86-64.so.2, libc.so.6, libdl.so.2, libm.so.6 and libpthread.so.0 to point to 2.17 versions instead of 2.12 ones.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .