我注意到每当我创建一个新的Dockerfile并且:
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.04
的结果不应该是uname -r
吗?为什么说Moby而不是Ubuntu?
答案 0 :(得分:2)
4.9.36-moby
是内核版本。内核是" host"之间共享的一个内核。和所有容器。因此,您正在运行Ubuntu容器,但内核来自"主机"。
因为您在macOS上使用了主机"实际上是Docker for Mac运行的Linux VM。该VM运行名为moby
的内核风格。我相信您可以在此处了解有关该内核的更多信息:https://github.com/linuxkit/linuxkit
答案 1 :(得分:2)
Docker容器共享主机操作系统的内核,因此当您在Ubuntu容器中调用uname -r
时,此命令将返回主机操作系统内核的信息。
在您的情况下,主机操作系统是MacOS。由于Docker需要一个Linux kernerl并且无法直接使用MacOS的内核,因此Docker for Mac将尝试使用Linux内核(称为Moby Linux)创建一个HyperKit VM来运行容器。所以在这种情况下,uname -r
命令将输出Moby Linux的内核信息。
有关详细信息,请查看Docker for Mac文档:https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-for-mac-environment