2017-08-16 40 views
1

我注意到,每當我創建一個新的Dockerfile和:爲什麼Docker會調用每臺機器Moby?

RUN FROM ubuntu:latest或者如果我運行下面的命令:

docker run -it ubuntu bash然後執行:

uname -a,結果總是像下面:

Linux 5d0eab7d2f8e 4.9.36-moby #1 SMP Wed Jul 12 15:29:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

不宜結果是Ubuntu-16.04uname -r?它爲什麼說Moby而不是Ubuntu?

+1

什麼是你的操作系統運行泊塢窗? MacOS或Linux? –

+1

這與Docker運行的內核操作系統有關。在我的流浪VM裏面,我得到'Linux vagrant 4.4.0-66-generic#87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux'。所以是的,只有基於主機操作系統和docker版本纔會有所不同。 –

+0

@HoomingZhang,它在MacOS上。 – Moose

回答

2

Docker容器共享主機操作系統的內核,因此當你在Ubuntu容器中調用uname -r時,該命令將返回主機操作系統內核的信息。

就你而言,主機操作系統是MacOS。由於Docker需要Linux kernerl,並且不能直接使用MacOS內核,所以Docker for Mac將嘗試創建一個帶有Linux內核(稱爲Moby Linux)的HyperKit VM來運行容器。所以在這種情況下,uname -r命令將輸出Moby Linux的內核信息。

有關詳細信息,請泊塢窗爲Mac文檔:https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-for-mac-environment

+0

我有一個程序要求內核是一個Linux內核,它使用'uname -r'來驗證。因此,如果你有一個運行MacOS(Moby)的ontop的linux容器,那麼這會破壞這類程序的虛擬化概念(或者基本上這意味着這樣的程序不能在容器中運行)。有沒有解決這個問題的方法? (除了要求程序的維護者修改程序代碼本身) –

+0

@jerseybean我找不出任何解決方案,好像程序是爲裸機環境設計的。您可能可以通過您的意見在SO上創建問題,但我懷疑是否有任何解決方法。 –

1

4.9.36-moby是內核版本。內核是「主機」和所有容器之間共享的一塊。所以你運行的是Ubuntu容器,但內核來自「主機」。

由於您在macOS上的「主機」實際上是由Docker for Mac運行的Linux VM。該虛擬機運行一個稱爲moby的內核風格。我相信你可以在這裏瞭解更多關於該內核的知識:https://github.com/linuxkit/linuxkit

相關問題