如何在Docker容器中运行完整的操作系统,而无需指定命令?

我正在关注CoreOS Docker文档 ,它提到了启动容器的命令如下:

docker run someImageName /bin/somebinary 

someImageName是一个图像。 当/ bin / somebinary退出时,图像将不再运行。

我只是想运行一个图像,而不指定任何二进制文件运行。 相反, 我只是想运行通常在映像操作系统中运行的服务(例如systemd / sysvinit)

这似乎是任何人都想用Docker做的最常见的事情,但试图运行一个没有命令的图像返回:

 2014/02/05 14:49:19 Error: create: No command specified 

我如何启动Docker容器并运行完整的操作系统,而不是指定命令

正如这里所logging的那样,只需运行/sbin/init作为命令就像任何其他从单用户引导到多用户模式的unix一样。

https://stackoverflow.com/questions/19332662/start-full-container-in-docker

容器可以是完整的操作系统,它们不必是虚拟机(对于这个问题,configuration和pipe理只是更加复杂)。

我会说Docker的重点是让应用程序容器变得简单,所以你只需要configuration一个应用程序,而不是整个操作系统。

Docker是一个pipe理和部署应用程序容器的系统 ,而不是操作系统容器。 看起来好像你正在运行一个Docker容器和引导一个操作系统。

您的Docker容器应该是单一目的,范围非常狭窄的应用程序,可以使用单个命令启动。 如果你正在寻找比这更复杂的东西,那么Doc​​ker不是你正在寻找的解决scheme。 在这种情况下,请查看KVM,ESXi,OpenVZ, LXD等

如果您只是在寻找如何为容器指定默认的CMDENTRYPOINT ,那么可以在构build时使用Dockerfile来完成。

要在容器中运行完整的操作系统,请创build以下Dockerfile:

 FROM fedora:25 CMD /sbin/init 

然后构build并启动容器并在其中input一个shell来浏览在其中运行的服务:

 docker build -t os . docker run -d --privileged --name os os docker exec -it os bash 

容器内完整的systemd服务。 美丽。