我正在关注CoreOS Docker 文档,它提到使用以下命令启动容器:
docker run someImageName /bin/somebinary
Run Code Online (Sandbox Code Playgroud)
哪里someImageName
有图。当 /bin/somebinary 退出时,图像将不再运行。
我只想运行一个图像,而不指定任何要运行的二进制文件。相反,我只想运行通常在图像操作系统内部运行的服务(例如,systemd/sysvinit)。
这似乎是任何人都想用 Docker 做的最常见的事情,但是尝试在没有命令的情况下运行镜像会返回:
2014/02/05 14:49:19 Error: create: No command specified
Run Code Online (Sandbox Code Playgroud)
如何启动 Docker 容器并运行完整的操作系统,而不是指定命令?
Fre*_*Dog 26
如此处所述,您只需/sbin/init
像从单用户模式到多用户模式的任何其他 unix 引导一样,作为命令运行即可。
容器可以是成熟的操作系统,它们只是不必如此(VM 也不是,只是配置和管理更复杂)。
我想说 Docker 的全部意义在于使应用程序容器变得简单,这样您只需配置一个应用程序,而不是整个操作系统。
EEA*_*EAA 12
Docker 是用于管理和部署应用程序容器的系统,而不是操作系统容器。似乎您将运行 docker 容器与启动操作系统混为一谈。
您的 Docker 容器应该是单一用途、范围非常窄的应用程序,可以使用单个命令启动。如果您正在寻找比这更复杂的东西,那么 Docker 不是您正在寻找的解决方案。在这种情况下,请查看 KVM、ESXi、OpenVZ、LXD等。
如果你只是找你如何指定一个默认CMD
,并ENTRYPOINT
为您的容器,你可以这样做,在编译时使用Dockerfile。
要在容器中运行完整的操作系统,请创建以下 Dockerfile:
FROM fedora:25
CMD /sbin/init
Run Code Online (Sandbox Code Playgroud)
然后构建并启动容器并在其中输入一个 shell 以探索其中运行的服务:
docker build -t os .
docker run -d --privileged --name os os
docker exec -it os bash
Run Code Online (Sandbox Code Playgroud)
容器内的完整 systemd 服务。美丽的。
归档时间: |
|
查看次数: |
56938 次 |
最近记录: |