编辑代码

#!/bin/bash

# 函数:1检查daemon.jsons配置文件是否存在,存在则备份
function backup_create_daemon_json() {
    local daemon_json_file="/etc/docker/daemon.json"
    local backup_dir="/etc/docker/daemon_json_backup"
    local daemon_json_content='{"insecure-registries": ["192.168.1.144:8083", "192.168.1.144:8082"]}'

    # 检查是否有sudo权限,如果没有,则退出脚本
    if ! sudo -n true 2>/dev/null; then
        echo "脚本需要sudo权限才能操作文件,请确保脚本以sudo或root身份运行。"
        exit 1
    fi

    echo "检查daemon.json文件是否存在"
    # 检查是否存在daemon.json文件
    if [ -f "$daemon_json_file" ]; then
        local backup_date=$(date "+%Y-%m-%d_%H-%M-%S")
        local backup_file="$backup_dir/daemon.json_$backup_date"

        # 创建备份目录
        if ! mkdir -p "$backup_dir"; then
            echo "创建备份目录失败,请检查目录权限或路径设置。"
            exit 1
        fi
        # 备份daemon.json文件
        sudo cp "$daemon_json_file" "$backup_file"
        echo "检查已存在,备份原有的daemon.json文件为 $backup_file"
    else
        echo "daemon.json文件不存在,直接新增"
    fi

    # 创建并写入daemon.json文件
    echo "$daemon_json_content" | sudo tee /etc/docker/daemon.json > /dev/null
    echo "成功新增daemon.json文件"

    #重新加载配置
    echo "重新加载daemon.json配置"
    sudo systemctl daemon-reload

    #重启docker使其生效
    echo "重启 Docker 以使daemon.json配置生效"
    sudo systemctl restart docker
    sleep 5

    #登录docker私库
    docker login 192.168.1.144:8083  -u admin -p 3edc\$RFVs
    echo "成功登录docker私库"

    # 检查是否已经存在同样版本的镜像,如果不存在则从私库中拉取镜像并重命名
    if ! docker images | awk -v image="192.168.1.144:8083/zookeeper" -v tag="3.6.2" '$1 == image && $2 == tag { found = 1; exit } END { exit !found }'; then
        if docker pull 192.168.1.144:8083/zookeeper:3.6.2; then
            echo "成功从私库中拉取镜像 192.168.1.144:8083/zookeeper:3.6.2"
        else
            echo "从私库中拉取镜像失败,请检查私库地址和镜像是否正确。"
            exit 1
        fi
    else
        echo "本地已存在相同版本的镜像 192.168.1.144:8083/zookeeper:3.6.2,跳过拉取镜像步骤。"
    fi
}


function run_container() {
    #  运行容器
    docker run -d --name=zookeeper --restart=always -p 2181:2181 -v /opt/docker/data/zookeeper:/data 192.168.1.144:8083/zookeeper:3.6.2

    #  验证容器状态
    sleep 10  # 等待容器启动
    if docker ps -a | grep -q mongo; then
        echo "容器启动成功!"
    else
        echo "容器启动失败,请检查日志和配置。"
    fi
}

function check_and_restore() {
    #  如果之前存在daemon.json文件,还原回去并重启docker
    if [ -f /etc/docker/daemon_json_backup/daemon.json_* ]; then
        cp /etc/docker/daemon_json_backup/daemon.json_* /etc/docker/daemon.json
        rm -rf /etc/docker/daemon_json_backup
        systemctl restart docker
    fi

    #  验证docker是否正常
    docker ps
}

# 调用函数
backup_create_daemon_json
run_container
check_and_restore