web-dev-qa-db-ja.com

信頼できないDockerコンテナーに欠落している/ lib / modules / $(uname -r)をインストールする方法

Macでdockerを実行する

docker pull ubuntu:14.04
docker run -i -t ubuntu:14.04 /bin/bash

Linux標準ベース

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
3
zabumba

Docker for Macは、仮想化用に Hyperkit を使用して構築され( [〜#〜] faq [〜#〜] を参照)、 linuxkit カーネルを実行します(すでにご存じのとおり)これはコンテナを実行するためにカスタムビルドされているため、カーネルに関連する、またはカーネルに関連する低レベルの開発を行う場合、通常のLinuxディストリビューションを使用する場合とまったく同じようには機能しません。

[〜#〜] qemu [〜#〜] を使用して、さまざまなタイプのハードウェアをエミュレートしたり、さまざまなBIOSを使用したり、さらに ipxe

そうは言っても、あなたの質問に答えるには、コンテナに generic linux kernel をインストールするためにlinux-virtualをインストールする必要があります。

編集:カーネルのバージョンが異なるため、uname -rも機能しません。 trusty(14.04)のデフォルトのカーネルバージョンは3.xのままです。

5
rage