我正在关注CoreOS Docker 文档,它提到使用以下命令启动容器:
docker run someImageName /bin/somebinary
哪里someImageName
有图。当 /bin/somebinary 退出时,图像将不再运行。
我只想运行一个图像,而不指定要运行的任何二进制文件。相反,我只想运行通常在映像 OS 中运行的服务(例如 systemd / sysvinit)。
这似乎是任何人都想用 Docker 做的最常见的事情,但是尝试在没有命令的情况下运行映像会返回:
2014/02/05 14:49:19 Error: create: No command specified
如何启动 Docker 容器并运行完整的操作系统,而不是指定命令?
如此处所述,您只需
/sbin/init
像从单用户模式到多用户模式的任何其他 unix 引导一样以命令运行。https://stackoverflow.com/questions/19332662/start-full-container-in-docker
容器可以是成熟的操作系统,但它们不一定是(虚拟机也不是,只是配置和管理更复杂)。
我想说 Docker 的全部意义在于让应用程序容器变得简单,这样你只需要配置一个应用程序,而不是整个操作系统。
Docker 是一个用于管理和部署应用程序容器的系统,而不是操作系统容器。似乎您将运行 docker 容器与引导操作系统混为一谈。
您的 Docker 容器应该是单一用途、范围非常狭窄的应用程序,可以使用单个命令启动。如果您正在寻找比这更复杂的东西,那么 Docker 不是您正在寻找的解决方案。在这种情况下,请查看 KVM、ESXi、OpenVZ、LXD等。
如果您只是在寻找如何为您的容器指定默认值
CMD
,ENTRYPOINT
您可以在构建时使用 Dockerfile 执行此操作。要在容器中运行完整的操作系统,请创建以下 Dockerfile:
然后构建并启动容器并在其中输入一个 shell 以探索其中运行的服务:
容器内的完整系统服务。美丽的。
只需根据需要多次从同一图像运行。将创建新容器,然后可以启动和停止它们,每个容器都保存自己的配置。为了您的方便,最好给每个容器一个带有“--name”的名称。
菲:
而已。
之后,您将永久创建容器,并且可以像 VM 一样启动和停止它们。
进入容器并做你想做的事: