当我调试我的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
(“mytag”通常类似于“生产”,“测试”或“开发”。不确定我是否应该以这种方式使用标签)
但现在第二个命令似乎不再起作用了:它正在启动一个旧容器。如果我用$ docker images
列出所有容器,我会在第3位看到我标记的容器,并在其前面看到其他未标记的容器。如果我使用第一个容器的ID它工作正常,但这样做会很烦人,我每次都要搜索它的ID。
我做错了什么?
答案 0 :(得分:4)
您只需使用以下命令启动并附加容器:
docker start -i #ContainerID
答案 1 :(得分:2)
明确容器 vs images 非常重要。听起来您的标记图像在图像列表中排在第3位,并且您认为第一张只有n ID的图像确实应该被标记,但事实并非如此。这可能意味着构建图像时出现问题。 docker build
输出为verbose by default,应该会显示问题。
顺便说一句,我并不完全确定您的用例,但是开发,测试和生产使用不同容器的想法是一种反模式。重点是尽量减少执行环境之间的差异。在大多数情况下,您应该使用相同的映像,但提供不同的环境变量,以根据需要为每个环境配置应用程序。但同样,我确信有理由这样做,你可能有一个合法的。
答案 2 :(得分:1)
以下是我使用的内容:
run_most_recent_container() { docker exec -it `docker ps -a --no-trunc -q | head -n 1` bash; }