달리기도커Apple 컴퓨터에서
docker pull ubuntu:14.04
docker run -i -t ubuntu:14.04 /bin/bash
리눅스 표준 라이브러리
root@d112db1e835e:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
내 목표는 좋은 오래된 C 코드를 작성하는 데 사용하는 전용 노트북을 폐기하고 대신 Docker 컨테이너를 사용하는 것입니다.
내 코드를 컴파일하기 위해 Makefile
실행하고 싶습니다
Makefile: /usr/bin/make -C /lib/modules/$(shell uname -r)/build M=$(PWD)/linux/$* modules
불행히도 modules
폴더가 비어 있습니다
mysuer@d112db1e835e:~/robot$ ls -al /lib/modules/
ls: cannot access /lib/modules/: No such file or directory
내 Linux 컴퓨터에서 다음 모듈을 찾을 수 있습니다.
$ ls -al /lib/modules/
total 28
drwxr-xr-x 7 root root 4096 Dez 13 2016 .
drwxr-xr-x 24 root root 4096 Apr 24 2017 ..
drwxr-xr-x 5 root root 4096 Dez 13 2016 3.13.0-105-generic
drwxr-xr-x 5 root root 4096 Jun 23 2015 3.13.0-55-generic
drwxr-xr-x 5 root root 4096 Jul 10 2015 3.13.0-57-generic
drwxr-xr-x 5 root root 4096 Nov 3 2015 3.13.0-65-generic
drwxr-xr-x 5 root root 4096 Nov 24 2015 3.13.0-68-generic
하지만 내 도커에는 모듈이 없습니다.
내 도커에
uname -r
4.9.60-linuxkit-aufs
그러므로
/usr/bin/make -C /lib/modules/4.9.60-linuxkit-aufs/build .... FAILS
/lib/modules/4.9.60-linuxkit-aufs
여기는 아니야.
이 문제를 어떻게 해결할 수 있나요?
헤더를 설치해 보세요
apt-cache search linux-headers-4
linux-headers-4.2.0-18 - Header files related to Linux kernel version 4.2.0
linux-headers-4.2.0-18-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-18-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-19 - Header files related to Linux kernel version 4.2.0
linux-headers-4.2.0-19-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-19-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-21 - Header files related to Linux kernel version 4.2.0
linux-headers-4.2.0-21-generic - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-21-lowlatency - Linux kernel headers for version 4.2.0 on 64 bit x86 SMP
linux-headers-4.2.0-22 - Header files related to Linux kernel version 4.2.0
...
4.9.60에 대한 제목을 찾지 못했습니다.
root@d112db1e835e:~# apt-get install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.9.60-linuxkit-aufs
E: Couldn't find any package by regex 'linux-headers-4.9.60-linuxkit-aufs'
또는
root@d112db1e835e:~# apt-cache search linux-headers-4.9
root@d112db1e835e:~#
후보자 없음
root@d112db1e835e:~# apt-get install linux-headers
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package linux-headers is a virtual package provided by:
linux-headers-4.4.0-1010-aws 4.4.0-1010.10
linux-headers-4.4.0-1009-aws 4.4.0-1009.9
... FILTERED ...
linux-headers-3.13.0-100-lowlatency 3.13.0-100.147
linux-headers-3.13.0-100-generic 3.13.0-100.147
You should explicitly select one to install.
E: Package 'linux-headers' has no installation candidate
root@d112db1e835e:~#
어떤 패키지도 반환되지 않습니다.
root@d112db1e835e:~# apt-cache search linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-3.13.0 - Linux kernel source for version 3.13.0 with Ubuntu patches
답변1
Mac용 Docker가 사용됩니다.슈퍼 키트가상화의 경우(참조자주하는 질문) 그리고 실행리눅스킷이미 알고 있듯이 커널은 컨테이너 실행을 위해 사용자 정의되어 있으므로 커널/하위 수준 커널 관련 개발을 사용하는 경우 일반 Linux 배포판을 사용하는 것과 동일한 방식으로 작동하지 않습니다.
나는 사용하는 것이 좋습니다QEMU이러한 종류의 작업에서는 다양한 유형의 하드웨어를 에뮬레이트하거나, 다양한 BIOS를 사용하거나, pxeboot를 사용할 수도 있습니다.ipxe.
귀하의 질문에 답하려면 다음을 linux-virtual
설치 해야 합니다.범용 Linux 커널당신의 컨테이너를 위해.
편집: uname -r
다른 커널 버전이므로 작동하지 않습니다. trusty(14.04)의 기본 커널 버전은 여전히 3.x입니다.