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