#!/bin/bash # Kingbase容器名称 CONTAINER_NAME="kingbase8" # Kingbase镜像版本 KINGBASE_VERSION="v1" # 镜像名称 IMAGE_NAME="127.0.0.1:5000/kingbase8:${KINGBASE_VERSION}" # 映射端口(主机:容器) PORT="54321:54321" # 网络配置 NETWORK="scm-net" # 容器IP CONTAINER_IP="172.20.0.4" # 环境变量配置 TZ="Asia/Shanghai" NEED_START="yes" DB_USER="itc_dne" DB_PASSWORD="itc_dne" DB_MODE="oracle" # 数据存储路径 DATA_PATH="/docker-data/kingbase/data" # 创建目录并设置权限函数 create_dirs() { # 创建数据目录并设置权限 if [ ! -d "$DATA_PATH" ]; then mkdir -p "$DATA_PATH" echo "创建数据目录: $DATA_PATH" chmod -R 777 "$DATA_PATH" echo "设置数据目录权限: $DATA_PATH" fi } # 部署Kingbase deploy() { if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then echo "Kingbase容器 $CONTAINER_NAME 已存在并运行中" return 1 fi if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "发现已停止的Kingbase容器,正在启动..." docker start $CONTAINER_NAME return 0 fi echo "开始部署Kingbase容器..." create_dirs docker run -d --privileged --restart always \ --net=$NETWORK --ip=$CONTAINER_IP \ -p $PORT \ --name $CONTAINER_NAME \ -e TZ=$TZ -e NEED_START=$NEED_START \ -e DB_USER=$DB_USER -e DB_PASSWORD=$DB_PASSWORD -e DB_MODE=$DB_MODE \ -v $DATA_PATH:/home/kingbase/userdata/data \ $IMAGE_NAME if [ $? -eq 0 ]; then echo "Kingbase容器部署成功!" echo "容器名称: $CONTAINER_NAME" echo "映射端口: $PORT" else echo "Kingbase容器部署失败!" fi } # 查看日志 logs() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Kingbase容器 $CONTAINER_NAME 不存在" return 1 fi echo "查看Kingbase容器日志 (按Ctrl+C退出)..." docker logs -f --tail 200 $CONTAINER_NAME } # 重启容器 restart() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Kingbase容器 $CONTAINER_NAME 不存在" return 1 fi echo "正在重启Kingbase容器..." docker restart $CONTAINER_NAME if [ $? -eq 0 ]; then echo "Kingbase容器重启成功!" else echo "Kingbase容器重启失败!" fi } # 删除容器 remove() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Kingbase容器 $CONTAINER_NAME 不存在" return 1 fi echo "警告:此操作将删除Kingbase容器,但数据目录会保留" read -p "确定要删除吗?(y/n) " confirm if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then echo "取消删除操作" return 0 fi echo "正在停止并删除Kingbase容器..." docker stop $CONTAINER_NAME docker rm $CONTAINER_NAME if [ $? -eq 0 ]; then echo "Kingbase容器删除成功!" echo "数据保留在: $DATA_PATH" else echo "Kingbase容器删除失败!" fi } # 显示帮助 show_help() { echo "Kingbase容器管理脚本" echo "用法: $0 [命令]" echo "命令列表:" echo " deploy - 部署并启动Kingbase容器" echo " logs - 查看Kingbase容器日志" echo " restart - 重启Kingbase容器" echo " remove - 删除Kingbase容器(保留数据)" echo " help - 显示帮助信息" } # 主逻辑 case "$1" in deploy) deploy ;; logs) logs ;; restart) restart ;; remove) remove ;; help) show_help ;; *) echo "未知命令: $1" show_help exit 1 ;; esac