我正在关注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容器应该是单一目的,范围非常狭窄的应用程序,可以使用单个命令启动。 如果你正在寻找比这更复杂的东西,那么Docker不是你正在寻找的解决scheme。 在这种情况下,请查看KVM,ESXi,OpenVZ, LXD等
如果您只是在寻找如何为容器指定默认的CMD
和ENTRYPOINT
,那么可以在构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服务。 美丽。