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

如何运行我创建的最新docker容器?,docker,Docker,在调试Dockerfile时,y经常需要运行以下两个命令: $ 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 mytag通常

在调试Dockerfile时,y经常需要运行以下两个命令:

$ 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
mytag通常类似于生产、测试或开发。不确定我是否应该这样使用标签

但是现在第二个命令似乎不再起作用了:它正在启动一个旧容器。如果我列出所有带有$docker图像的容器,我会在第三位看到带标签的容器,在它前面会看到其他未带标签的容器。如果我使用第一个容器的ID,它可以正常工作,但是这样做会很烦人,我每次都必须搜索它的ID


我做错了什么?

清楚容器与图像之间的关系很重要。听起来您的标记图像在图像列表中排名第三,您认为只有n个ID的第一个图像确实应该标记,但它不是。这可能意味着在构建图像时存在问题。docker构建输出是,并且应该向您显示问题所在


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

你只需要使用以下方法开始并连接一个容器:

docker start -i #ContainerID
以下是我使用的:

run_most_recent_container() { docker exec -it `docker ps -a --no-trunc -q | head -n 1` bash; }

那么,容器和图像之间有什么区别呢?是的,新创建的图像中存在问题,所以我想输入它,看看发生了什么。如果它没有找到刚下载的文件,我想进去运行ls或其他什么,因为我可能输入了错误。图像可以用作新容器的父对象。在这种情况下,这是一个微妙但重要的区别。看见要回答后续问题,您可以完全按照问题中所做的操作来帮助调试:在创建的最后一个映像上使用docker run with bash并四处查看。但我最初的问题是如何运行最新的容器或映像,好吗。除了找到它的ID,然后复制/粘贴它之外,还有别的方法吗?因为每次我出错时,我都必须运行docker图像并用眼睛解析结果,将鼠标移动到正确的位置,仔细选择相关位等,这需要花费时间和精力。我还是不知道答案。有两件事。1 docker ps-l将显示上次运行的容器。除非您执行docker ps-l | awk'/^[0-9a-f]/{print$2}之类的操作,否则您仍然必须复制并粘贴ID,以便只获取ID而不复制并粘贴。2 docker build的输出将在步骤失败之前向您显示容器ID。@BenWhaley docker ps-l|awk'/^[0-9a-f]/{print$2}为我提供最后一个容器的图像,而不是ID。要获得唯一的ID,我可以使用-q quiet选项,例如docker ps-l-q.-