如果docker容器不存在,则执行bash命令

在Jenkins机器上,我只想创build一个具有指定名称的docker容器,只要它不存在(在shell脚本中)。 我想我可能会运行命令来创build容器,无论如何忽略失败,但是这会导致我的jenkins作业失败。

因此,我想知道如何检查泊坞窗容器是否存在或不使用bash。

您可以通过刷新<name>来检查是否存在正在运行的容器,然后像以下这样启动它:

 [ ! "$(docker ps -a | grep <name>)" ] && docker run -d --name <name> <image> 

更好:

使用https://docs.docker.com/engine/reference/commandline/ps/并检查一个退出的容器是否被阻塞,所以你可以在运行容器之前先删除它&#xFF1A;

 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 

您可以使用docker ps命令的filterformat选项来避免使用像grepawk等unix实用程序的pipe道。

 name='nginx' [[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]] || echo "start your nginx docker here" 

我想

 docker container inspect <container-name> || docker run... 

因为docker集装箱检查电话将设置$? 如果容器不存在(不能检查),则返回1;如果容器存在,则返回0(这是停止的容器)。 所以运行命令只会在容器不按预期存在的情况下被调用。

只需以^ /和后缀加前缀名称即可。 看来这是一个正则expression式:

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