为什么Docker把每台机器都叫做Moby?

为什么Docker把每台机器都叫做Moby?,docker,dockerfile,Docker,Dockerfile,我注意到,每当我创建一个新的Dockerfile和: 从ubuntu:latest运行或者如果我运行以下命令: docker运行-it ubuntu bash,然后执行以下操作: uname-a,结果总是如下所示: Linux 5d0eab7d2f8e 4.9.36-moby#1 SMP星期三7月12日15:29:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 对于uname-r,结果不应该是Ubuntu-16.04?为什么它说Moby而不是Ubuntu?4

我注意到,每当我创建一个新的Dockerfile和:

从ubuntu:latest运行
或者如果我运行以下命令:

docker运行-it ubuntu bash
,然后执行以下操作:

uname-a
,结果总是如下所示:

Linux 5d0eab7d2f8e 4.9.36-moby#1 SMP星期三7月12日15:29:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux


对于
uname-r
,结果不应该是
Ubuntu-16.04
?为什么它说Moby而不是Ubuntu?

4.9.36-Moby
是内核版本。内核是“主机”和所有容器之间共享的一部分。因此,您运行的是Ubuntu容器,但内核来自“主机”


由于您在macOS上,“主机”实际上是Docker for Mac运行的linux虚拟机。该虚拟机运行一个名为
moby
的内核风格。我相信您可以在这里了解有关该内核的更多信息:

4.9.36-moby
是内核版本。内核是“主机”和所有容器之间共享的一部分。因此,您运行的是Ubuntu容器,但内核来自“主机”


由于您在macOS上,“主机”实际上是Docker for Mac运行的linux虚拟机。该虚拟机运行一个名为
moby
的内核风格。我相信您可以在这里了解更多关于该内核的信息:

Docker容器共享主机操作系统的内核,因此当您在Ubuntu容器中调用
uname-r
时,该命令将返回主机操作系统内核的信息

在您的情况下,主机操作系统是MacOS。由于Docker需要Linux内核并且不能直接使用MacOS的内核,Docker for Mac将尝试使用Linux内核(称为Moby Linux)创建HyperKit VM来运行容器。因此在这种情况下,
uname-r
命令将输出mobylinux的内核信息


有关更多详细信息,请检查Docker For Mac doc:

Docker容器共享主机操作系统的内核,因此当您在Ubuntu容器中调用
uname-r
时,此命令将返回主机操作系统的内核信息

在您的情况下,主机操作系统是MacOS。由于Docker需要Linux内核并且不能直接使用MacOS的内核,Docker for Mac将尝试使用Linux内核(称为Moby Linux)创建HyperKit VM来运行容器。因此在这种情况下,
uname-r
命令将输出mobylinux的内核信息


有关更多详细信息,请查看Docker For Mac doc:

运行Docker的操作系统是什么?MacOS还是Linux?这与docker运行的内核操作系统有关。在同一个映像中的我的vagrant VM上,我得到了
Linux vagrant 4.4.0-66-generic#87 Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 GNU/Linux
。因此,是的,它只会根据主机操作系统和docker版本有所不同well@HaomingZhang,它在MacOS上。你运行Docker的操作系统是什么?MacOS还是Linux?这与docker运行的内核操作系统有关。在同一个映像中的我的vagrant VM上,我得到了
Linux vagrant 4.4.0-66-generic#87 Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 GNU/Linux
。因此,是的,它只会根据主机操作系统和docker版本有所不同well@HaomingZhang我有一个程序要求内核是linux内核,它使用'uname-r'来验证这一点。因此,如果您有一个运行ontop of MacOS(Moby)的linux容器,那么这就打破了此类程序的任何虚拟化概念(或者基本上意味着此类程序不能在容器内运行)。有什么解决办法吗?(除了要求程序的维护者修改程序本身的代码之外)@jerseybean我想不出任何解决方案,似乎该程序是为裸机环境设计的。你可能会用你的评论提出一个问题,但我怀疑是否有任何解决办法。我有一个程序要求内核是linux内核,它使用“uname-r”来验证这一点。因此,如果您有一个运行ontop of MacOS(Moby)的linux容器,那么这就打破了此类程序的任何虚拟化概念(或者基本上意味着此类程序不能在容器内运行)。有什么解决办法吗?(除了要求程序的维护者修改程序本身的代码之外)@jerseybean我想不出任何解决方案,似乎该程序是为裸机环境设计的。你也许可以通过你的评论来提出一个问题,但我怀疑是否有任何解决办法。