内容纲要
使用脚本,根据传入的容器名字判断容器是否存在,如果存在就重启容器,如果不存在则判断传入的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"启动容器"