如何确保只有单个docker镜像正在运行?

时间:2017-11-17 02:15:52

标签: docker

我正在构建一个我在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

这会像我期望的那样创建图像并按我的意愿运行它。但是,如果我运行我的脚本两次,我有时会同时运行两个图像。试图诊断这种古怪,我跑了这个:

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

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

CONTAINER ID
aeb4c0486ef5 paul/my-app
b32be5e53df0 6d965c3e84f1

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

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

1 个答案:

答案 0 :(得分:1)

感谢用户larsks提供了--name参数。我开发它时,我的应用程序就像单身人士一样。

我已将其分成两个独立的脚本。

<强> 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