[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.3.258:build (default) on project pin-user: Exception caught: Error getting container 1e509efd653d0a3a942bf5ef34601305b7301d64378381614b55d3f5f88c7166 from driver devicemapper: open /dev/mapper/docker-202:33-5767218-1e509efd653d0a3a942bf5ef34601305b7301d64378381614b55d3f5f88c7166: no such file or directory
IMAGE="$1" OPTIONS="" PORT="$2" #param validate if [ $# -lt 2 ]; then echo"you must use like this : ./deploy_run.sh <image> <port> [options]" exit fi if [ "$3" != "" ]; then OPTIONS="$3" fi
#拿到容器ID后kill掉并删除。 delete_container(){ echo"the container id is $1" if [ -n "$1" ]; then echo"delete container:"$1 docker stop $1 docker rm -f $1 fi }
echo">>> Get old image $IMAGE container id" CID=$(docker ps | grep "${IMAGE}" | awk '{print $1}') #因为jenkins每次的build的时候,如果镜像的tag没有指定,那么新的镜像build成功后,之前的镜像名称就会变成none。 #所以我们找出为名字为none的就是之前的镜像。 if [ ! -n "$CID" ]; then echo"get old image id" OLD_IMAGE_IDS=$(docker images --no-trunc| grep none | awk '{print $3}') echo$OLD_IMAGE_IDS if [ -n "$OLD_IMAGE_IDS" ]; then if [ -n ${OLD_IMAGE_IDS[1]} ]; then for OLD_IMAGE_ID in$OLD_IMAGE_IDS do CID=$(docker ps | grep "${OLD_IMAGE_ID:0:12}" | awk '{print $1}') delete_container $CID done else delete_container $OLD_IMAGE_IDS fi fi else delete_container $CID fi #启动容器 echo"docker run -d -v /mnt:/mnt -p ${PORT}:${PORT}$IMAGE$OPTIONS" docker run -d -v /mnt:/mnt -p ${PORT}:${PORT}$IMAGE$OPTIONS echo"clean docker images" #再次清理名称为none的docker镜像。 docker images --no-trunc| grep none | awk '{print $3}' | xargs -r docker rmi -f #清理所有已经退出的容器 #docker rm `docker ps -a | grep Exited | awk '{print $1}'` echo"finished"