如何运行我创建的最新docker容器?

Cho*_*per 6 docker

当我调试我的Dockerfile时,你经常需要运行这两个命令:

$ docker build -t myuser/myapp:mytag - < myapp.docker # to create the container
$ docker run -i -t myuser/myapp:mytag /bin/bash       # to enter the container and see what's going on when something went wrong
Run Code Online (Sandbox Code Playgroud)

("mytag"通常类似于"生产","测试"或"开发".不确定我是否应该以这种方式使用标签)

但现在第二个命令似乎不再起作用了:它正在启动一个旧容器.如果我列出所有容器$ docker images,我会在第三个位置看到我标记的容器,并在其前面看到其他未标记的容器.如果我使用第一个容器的ID它工作正常,但这样做会很烦人,我每次都要搜索它的ID.

我究竟做错了什么?

Ben*_*ley 3

明确容器镜像非常重要。听起来你的标记图像是图像列表中的第三个,并且你认为第一个只有 n ID 的图像确实应该被标记,但事实并非如此。这可能意味着构建图像时出现问题。默认情况下输出很详细docker build应该会告诉您问题所在。

顺便说一句,我并不完全确定您的用例,但使用不同的容器进行开发、测试和生产的想法是一种反模式。重点是尽量减少执行环境之间的差异。在大多数情况下,您应该使用相同的映像,但提供不同的环境变量来根据每个环境的需要配置应用程序。但同样,我确信这样做是有原因的,而且你可能有一个合法的理由。

  • 两件事情。1) `docker ps -l` 将显示上次运行的容器。您仍然需要复制并粘贴 ID,除非您执行类似“docker ps -l |”之类的操作。awk '/^[0-9a-f]/{print $2}'` 仅获取 ID,而不是复制和粘贴。2) `docker build` 的输出将显示失败步骤之前的容器 ID。 (2认同)
  • @BenWhaley `docker ps -l | awk '/^[0-9a-f]/{print $2}'` 给我最后一个容器的图像,而不是 ID。为了获得唯一的 ID,我可以使用“-q”(安静)选项,即“docker ps -l -q”。 (2认同)