根据容器名称和image名字判断创建容器或重启容器

内容纲要

使用脚本,根据传入的容器名字判断容器是否存在,如果存在就重启容器,如果不存在则判断传入的image名字是否存在,如果存在则基于image创建容器

#!/bin/bash

CONTAINER_NAME=$1
IMAGE_NAME=$2

# 检查容器是否存在
if docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}\$"; then
  echo "容器${CONTAINER_NAME}已经存在,正在重启..."
  docker restart ${CONTAINER_NAME}
else
  # 检查镜像是否存在
  if docker images --format '{{.Repository}}:{{.Tag}}' | grep -Eq "^${IMAGE_NAME}\$"; then
    echo "镜像${IMAGE_NAME}已经存在,正在创建容器${CONTAINER_NAME}并启动..."
    docker run -d --name ${CONTAINER_NAME} ${IMAGE_NAME}
  else
    echo "镜像${IMAGE_NAME}不存在,请先pull该镜像"
  fi
fi

请注意,这个脚本需要两个参数:要操作的容器名和对应的镜像名。可以使用以下命令运行脚本:

bash script.sh container_name image_name

其中script.sh是脚本文件名,container_name是容器名字,image_name是镜像名字。
实际例子:

CONTAINER_NAME=""
ACTIVE=""
IMAGE_NAME="arc/springboot:v2"
PORT=8080
JAVA_OPTS="-Xmx512m -Xms256m"

if [ -n "$1" ]; then
    CONTAINER_NAME="$1"
else
    echo "containerName is must not empty!"
    exit -1
fi

if [ -n "$2" ]; then
    ACTIVE="$2"
else
    echo "spring.profiles.active is must not empty"
    exit -1
fi
# 如果参数被传递,则覆盖默认值
if [ -n "$3" ]; then
    IMAGE_NAME="$3"
fi

#获取当前路径
cur_dir=`dirname $(readlink -f $0)`
cd $cur_dir

if [ ! -e corp.jar ];then
    echo "corp.jar is must exist"
    exit -1;
fi

# 检查容器是否存在
if docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}\$"; then
  echo "容器${CONTAINER_NAME}已经存在,正在重启..."
  docker restart ${CONTAINER_NAME}
else
  # 检查镜像是否存在
  if docker images --format '{{.Repository}}:{{.Tag}}' | grep -Eq "^${IMAGE_NAME}\$"; then
    echo "镜像${IMAGE_NAME}已经存在,正在创建容器${CONTAINER_NAME}并启动..."
      docker run --name ${CONTAINER_NAME} \
      --hostname ${CONTAINER_NAME} \
      -v ${cur_dir}/corp.jar:/app/corp.jar \
      -v ${cur_dir}/logs/:/logs \
      -v ${cur_dir}/files/:/files \
      -v ${cur_dir}/etc/hosts/:/etc/hosts
      -p ${PORT}:8080 \
      -e JAVA_OPTS="${JAVA_OPTS} -Dspring.profiles.active=${ACTIVE}" \
      -d \
      --net zw_network \
      ${IMAGE_NAME}
  else
    echo "镜像${IMAGE_NAME}不存在,请检查镜像参数"
  fi
fi

echo $containernam"启动容器"

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注