我对 LXC 很熟悉,想试试 docker。我面临的问题是我找不到一种方法来告诉 docker 在后台启动一个容器,而不执行命令。例如,使用 LXC 我会这样做:
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
此时,我将拥有一个正在运行的容器,我可以将其用作任何 VM(对其进行 ssh,在其中安装东西......)似乎 docker 阻止了这种用法。我错过了什么吗?
当我需要检查我创建的在 Dockerfile 中运行正常 CMD 时遇到问题的 docker 容器时,我注释掉该命令并替换为“睡眠”命令,以便在容器启动时暂停容器,以便我可以登录它并检查安装。
在 Dockerfile 中
CMD ["sleep","3600"]
登录到正在运行的 Docker 实例
docker exec -i -t <Container ID> bash
使用 docker,从 CLI 中,您无法在不运行命令的情况下创建容器。如果您想使用 REST Api,您可以在不使用“start”的情况下调用“create”端点。
但是,我认为这对你没有任何好处。
在大多数情况下,您可能只想用 bash 运行一个容器docker run -t -i ubuntu bash
并在那里做一些事情。一旦你完成了你需要的一切,你就可以简单地从这一点提交并运行。
但是,通常最好一次执行一步以保持清晰的历史记录。看看 Docker 构建器 :)
您可以构建一个包含运行命令和其他配置的 Docker 映像,以便docker run <image>
启动容器。最简单的方法是使用CMD
Docker Builder。您需要最新版本的 Docker(> 0.4.6?)。
在使用 Docker Builder 之外,请查看docker commit
and的标志docker run
(其中命令参数是可选的)。