30

我对 LXC 很熟悉,想试试 docker。我面临的问题是我找不到一种方法来告诉 docker 在后台启动一个容器,而不执行命令。例如,使用 LXC 我会这样做:

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

此时,我将拥有一个正在运行的容器,我可以将其用作任何 VM(对其进行 ssh,在其中安装东西......)似乎 docker 阻止了这种用法。我错过了什么吗?

4

4 回答 4

40

当我需要检查我创建的在 Dockerfile 中运行正常 CMD 时遇到问题的 docker 容器时,我注释掉该命令并替换为“睡眠”命令,以便在容器启动时暂停容器,以便我可以登录它并检查安装。

在 Dockerfile 中

CMD ["sleep","3600"]

登录到正在运行的 Docker 实例

docker exec -i -t <Container ID> bash
于 2015-10-27T16:35:38.500 回答
15

使用 docker,从 CLI 中,您无法在不运行命令的情况下创建容器。如果您想使用 REST Api,您可以在不使用“start”的情况下调用“create”端点。

但是,我认为这对你没有任何好处。

在大多数情况下,您可能只想用 bash 运行一个容器docker run -t -i ubuntu bash并在那里做一些事情。一旦你完成了你需要的一切,你就可以简单地从这一点提交并运行。

但是,通常最好一次执行一步以保持清晰的历史记录。看看 Docker 构建器 :)

于 2013-06-30T18:17:57.067 回答
2

您可以构建一个包含运行命令和其他配置的 Docker 映像,以便docker run <image>启动容器。最简单的方法是使用CMDDocker Builder。您需要最新版本的 Docker(> 0.4.6?)。

在使用 Docker Builder 之外,请查看docker commitand的标志docker run(其中命令参数是可选的)。

于 2013-06-30T17:53:02.020 回答
0
于 2015-12-04T16:06:17.240 回答