我如何确保只有一个docker图像正在运行?

我正在构build一个在docker中运行的应用程序。 我只想要在给定的时间运行我的应用程序的单一版本,所以我试图停止旧的迭代容器,因为我开始新的。

mvn package docker:build docker ps -q --filter ancestor="paul/my-app" | xargs docker stop cd ./target/docker docker build . docker run -d paul/my-app 

这就像我期望的那样创build图像,并像我想要的那样运行它。 但是,如果我运行两次脚本,我有时会同时运行两个图像。 试图诊断这个怪事我跑这个:

 docker ps -a | awk '{ print $1,$2 }' 

现在我看到一些我不明白的东西。 docker ps -a的输出是

 CONTAINER ID aeb4c0486ef5 paul/my-app b32be5e53df0 6d965c3e84f1 

这意味着我不能通过图像名称可靠地停止容器。

有人可以向我解释为什么ID是散列而不是paul/my-app ? 如何可靠地确保在任何给定时间只有一个版本的映像存在/正在运行?

感谢–name参数的用户larsks 。 当我开发它时,我的应用程序就像一个单身人士一样。

我把它分成两个独立的脚本。

run-docker.sh

 #!/usr/bin/env bash set -e mvn package docker:build ./stop-docker.sh cd ./target/docker docker build . docker run -d --name paul-my-app --restart unless-stopped paul/my-app docker logs --follow paul-my-app 

这是对等的

stop-docker.sh

 #!/usr/bin/env bash set -e docker stop paul-my-app || true docker image prune -f docker container prune -f docker volume prune -f docker network prune -f docker system prune -f