我如何确保只有一个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