在Jenkins机器上,我想创建一个具有指定名称的码头集装箱,只要它尚不存在(在shell脚本中)。我想我可能会运行命令来创建容器,无论如何忽略失败,但是这会导致我的jenkins作业失败。如果码头集装箱不存在,则执行bash命令
因此,我想知道如何检查泊坞窗容器是否存在或不使用bash。
在Jenkins机器上,我想创建一个具有指定名称的码头集装箱,只要它尚不存在(在shell脚本中)。我想我可能会运行命令来创建容器,无论如何忽略失败,但是这会导致我的jenkins作业失败。如果码头集装箱不存在,则执行bash命令
因此,我想知道如何检查泊坞窗容器是否存在或不使用bash。
您可以通过grepping为<name>
检查正在运行的容器不存在,并火起来以后是这样的:
[ ! "$(docker ps -a | grep <name>)" ] && docker run -d --name <name> <image>
更好:
利用https://docs.docker.com/engine/reference/commandline/ps/,检查是否有退出容器块,这样你就可以将其删除运行容器之前首先:
if [ ! "$(docker ps -q -f name=<name>)" ]; then
if [ "$(docker ps -aq -f status=exited -f name=<name>)" ]; then
# cleanup
docker rm <name>
fi
# run your container
docker run -d --name <name> my-docker-image
fi
您可以使用filter
和format
个选项docker ps
命令,以避免管道与UNIX工具一样grep
,awk
等
name='nginx'
[[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]] ||
echo "start your nginx docker here"
只是^ /及使用$前缀后缀的名称。这似乎是一个正则表达式:
CONTAINER_NAME='mycontainername'
CID=$(docker ps -q -f status=running -f name=^/${CONTAINER_NAME}$)
if [ ! "${CID}" ]; then
echo "Container doesn't exist"
fi
unset CID
我想
docker container inspect <container-name> || docker run...
因为码头工人集装箱检查调用设置$?如果容器不存在(不能检查),则将其设置为1,但如果存在(如果容器已停止),则设置为0。所以运行命令只会在容器不按预期存在的情况下被调用。
我甚至会用'docker container inspect
我用下面的代码,以确定是否搬运工容器存在:
CONTAINER_NAME='my_docker_container'
# Checking if docker container with $CONTAINER_NAME name exists.
COUNT=$(docker ps -a | grep "$CONTAINER_NAME" | wc -l)
if (($COUNT > 0)); then
echo 'container exists'
fi
右键 - 你所需要的'-a'或试图运行退出容器将失败。 – ldg
如果您有两个具有相似名称的容器,则此响应不起作用。例如:cool.project(容器1)和dashboard.cool.project(容器2) –
@MaximTkach这就是为什么使用第二种方法更好,您可以在docker ps命令中完全限定容器的名称。但是,您也可以在grep命令中引入一个正则表达式来在名称前后查找空格。这个测试是故意留给读者的。 – ferdy