我正在构建一个我在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
?如何可靠地确保在任何给定时间只存在/运行一个版本的图像?
答案 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