Arch Linux에서 CentOS Docker 이미지를 실행하면 코드 139로 종료됩니까?

Arch Linux에서 CentOS Docker 이미지를 실행하면 코드 139로 종료됩니까?

Arch Linux 호스트에서 CentOS Docker 이미지를 실행하려고 합니다. 다음 명령을 실행하면 139 오류 코드 외에는 아무것도 반환되지 않습니다.

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

CentOS Docker 이미지가 있습니다.

centos              centos6             0cbf37812bff        2 weeks ago         194MB

컨테이너 목록 아래에 centOS 컨테이너가 있습니다.

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

Docker 로그도 아무것도 반환하지 않습니다.

$ docker logs <container id>
$

다른 Docker 이미지를 사용해 보았는데 작동하지만 CentOS 이미지에만 영향을 미치는 것 같은데 직장에서는 centOS를 사용해야 합니다.

답변1

Centos 6.x를 실행하는 컨테이너에 문제를 일으키는 버전 4.11부터 Linux 커널의 vsyscall 링크에 대한 변경 사항입니다.

2가지 솔루션:

  • 7.x Centos 이미지 사용
  • 매개변수를 사용하여 커널을 시작해 보세요.vsyscall=emulate

GRUB 예, 조정 /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="vsyscall=emulate"

그런 다음 실행update-grub

systemd-boot의 예, conf를 수정 /boot/loader/entries하고 옵션 라인에 매개변수를 추가하세요.

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options *EXISTINGPARAMS* vsyscall=emulate

답변2

물론 가장 좋은 해결책은 다른 답변에서 제안한 대로 사용하는 것이지만 vsyscall=emulateCentOS 6 컨테이너가 포함된 시스템을 재부팅할 수 없는 경우(또는 내 경우처럼 chroot에 CentOS 6을 설치하는 경우) 일부는 신경 쓰지 마세요. 마음이 따뜻해지는 수술이라면 CentOS 6을 "업그레이드"하여 CentOS 7 glibc 버전을 사용하여 문제를 해결할 수도 있습니다. 단순한 교체만으로는 충분하지 않습니다. CentOS 7 시스템에서 최소한 다음 파일을 다음 디렉터리 libc.so로 복사해야 합니다 . 그런 다음 해당 기호 링크(예: , , 및 ) 를 업데이트하여 2.17 버전 대신 2.12 버전./lib64ld-2.17.solib{c,dl,m,pthread}-2.17.sold-linux-x86-64.so.2libc.so.6libdl.so.2libm.so.6libpthread.so.0

관련 정보