提交 757c8040 authored 作者: Andy's avatar Andy

12

上级 b68454c5
......@@ -347,74 +347,125 @@ run_service() {
cd ../..
}
# # main
# main() {
# #!/bin/bash
# pause() {
# read -rp "按回车键继续..."
# }
# while true; do
# clear
# echo_content "skyBlue" "============================"
# echo_content "skyBlue" " 主菜单 "
# echo_content "skyBlue" "============================"
# echo_content "skyBlue" "1) 测试 Git 账户"
# echo_content "skyBlue" "2) 获取 Plat Svr"
# echo_content "skyBlue" "3) 获取 Plat Web"
# echo_content "skyBlue" "4) 获取 Game Web"
# echo_content "skyBlue" "5) 运行 Docker"
# echo_content "skyBlue" "6) 运行 Server"
# echo_content "skyBlue" "0) 退出"
# echo_content "skyBlue" "============================"
# read -rp "请输入选项 [0-6]: " choice
# case $choice in
# 1)
# if check_git_account; then
# echo "✅ SSH 连接正常"
# else
# echo "❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
# exit 1
# fi
# pause
# ;;
# 2)
# fetch_git_platsvr
# pause
# ;;
# 3)
# fetch_git_platweb
# pause
# ;;
# 4)
# fetch_git_gameweb
# pause
# ;;
# 5)
# run_docker
# pause
# ;;
# 6)
# run_service
# pause
# ;;
# 0)
# echo "👋 退出程序."
# exit 0
# ;;
# *)
# echo "⚠️ 无效选项,请重新输入!"
# sleep 1
# ;;
# esac
# done
# }
# # ======= 安装默认工具 =======
# # check_install_dependencies
# # ======= 启动程序 =======
# main
main() {
#!/bin/bash
pause() {
read -rp "按回车键继续..."
}
while true; do
clear
echo_content "skyBlue" "============================"
echo_content "skyBlue" " 主菜单 "
echo_content "skyBlue" "============================"
echo_content "skyBlue" "1) 测试 Git 账户"
echo_content "skyBlue" "2) 获取 Plat Svr"
echo_content "skyBlue" "3) 获取 Plat Web"
echo_content "skyBlue" "4) 获取 Game Web"
echo_content "skyBlue" "5) 运行 Docker"
echo_content "skyBlue" "6) 运行 Server"
echo_content "skyBlue" "0) 退出"
echo_content "skyBlue" "============================"
read -rp "请输入选项 [0-6]: " choice
case $choice in
1)
if check_git_account; then
echo "✅ SSH 连接正常"
else
echo "❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
exit 1
fi
pause
;;
2)
fetch_git_platsvr
pause
;;
3)
fetch_git_platweb
pause
;;
4)
fetch_git_gameweb
pause
;;
5)
run_docker
pause
;;
6)
run_service
pause
;;
0)
echo "👋 退出程序."
exit 0
;;
*)
echo "⚠️ 无效选项,请重新输入!"
sleep 1
;;
esac
done
}
# ======= 安装默认工具 =======
# check_install_dependencies
# ======= 启动程序 =======
main
# ------------------ 数组定义菜单项 ------------------
MENU_ITEMS=(
"测试 Git 账户"
"获取 Plat Svr"
"获取 Plat Web"
"获取 Game Web"
"运行 Docker"
"运行 Server"
"Docker管理"
"结束"
)
# 每个编号对应一个函数(index 对齐 MENU_ITEMS)
MENU_ACTIONS=(
"check_git_account"
"fetch_git_platsvr"
"fetch_git_platweb"
"fetch_git_gameweb"
"run_docker"
"run_service"
"bash <(curl -sSL http://oauth2:QFF_7BNyjHsq_Zvfsfut@git.wkwork.xyz/LaunchDeploy/install/raw/master/docker.sh linux_docker)"
"exit 0"
)
# ------------------ 主循环 ------------------
while true; do
clear
echo "============================"
echo " 安装游戏平台($GamePlat_ranch) "
echo "============================"
for i in "${!MENU_ITEMS[@]}"; do
printf " %2d) %s\n" "$((i + 1))" "${MENU_ITEMS[$i]}"
done
echo "============================"
read -r -p "请选择操作: " choice
# 转为下标(减 1)
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "${#MENU_ITEMS[@]}" ]; then
index=$((choice - 1))
echo ">> 执行: ${MENU_ITEMS[$index]}"
eval "${MENU_ACTIONS[$index]}"
else
echo "无效选择。"
fi
echo
read -n 1 -s -r -p "按任意键继续..."
done
#!/bin/bash
gl_hui='\e[37m'
gl_hong='\033[31m'
gl_lv='\033[32m'
gl_huang='\033[33m'
gl_lan='\033[34m'
gl_bai='\033[0m'
gl_zi='\033[35m'
gl_kjlan='\033[96m'
canshu="CN"
permission_granted="false"
ENABLE_STATS="true"
docker_tato() {
local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
local image_count=$(docker images -q 2>/dev/null | wc -l)
local network_count=$(docker network ls -q 2>/dev/null | wc -l)
local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)
if command -v docker &>/dev/null; then
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_lv}环境已经安装${gl_bai} 容器: ${gl_lv}$container_count${gl_bai} 镜像: ${gl_lv}$image_count${gl_bai} 网络: ${gl_lv}$network_count${gl_bai} 卷: ${gl_lv}$volume_count${gl_bai}"
fi
}
docker_ps() {
while true; do
clear
send_stats "Docker容器管理"
echo "Docker容器列表"
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "容器操作"
echo "------------------------"
echo "1. 创建新的容器"
echo "------------------------"
echo "2. 启动指定容器 6. 启动所有容器"
echo "3. 停止指定容器 7. 停止所有容器"
echo "4. 删除指定容器 8. 删除所有容器"
echo "5. 重启指定容器 9. 重启所有容器"
echo "------------------------"
echo "11. 进入指定容器 12. 查看容器日志"
echo "13. 查看容器网络 14. 查看容器占用"
echo "------------------------"
echo "15. 开启容器端口访问 16. 关闭容器端口访问"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "新建容器"
read -e -p "请输入创建命令: " dockername
$dockername
;;
2)
send_stats "启动指定容器"
read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername
docker start $dockername
;;
3)
send_stats "停止指定容器"
read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername
docker stop $dockername
;;
4)
send_stats "删除指定容器"
read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername
docker rm -f $dockername
;;
5)
send_stats "重启指定容器"
read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername
docker restart $dockername
;;
6)
send_stats "启动所有容器"
docker start $(docker ps -a -q)
;;
7)
send_stats "停止所有容器"
docker stop $(docker ps -q)
;;
8)
send_stats "删除所有容器"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有容器吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker rm -f $(docker ps -a -q)
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
9)
send_stats "重启所有容器"
docker restart $(docker ps -q)
;;
11)
send_stats "进入容器"
read -e -p "请输入容器名: " dockername
docker exec -it $dockername /bin/sh
break_end
;;
12)
send_stats "查看容器日志"
read -e -p "请输入容器名: " dockername
docker logs $dockername
break_end
;;
13)
send_stats "查看容器网络"
echo ""
container_ids=$(docker ps -q)
echo "------------------------------------------------------------"
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
for container_id in $container_ids; do
local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
local container_name=$(echo "$container_info" | awk '{print $1}')
local network_info=$(echo "$container_info" | cut -d' ' -f2-)
while IFS= read -r line; do
local network_name=$(echo "$line" | awk '{print $1}')
local ip_address=$(echo "$line" | awk '{print $2}')
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
done <<<"$network_info"
done
break_end
;;
14)
send_stats "查看容器占用"
docker stats --no-stream
break_end
;;
15)
send_stats "允许容器端口访问"
read -e -p "请输入容器名: " docker_name
ip_address
clear_container_rules "$docker_name" "$ipv4_address"
local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
check_docker_app_ip
break_end
;;
16)
send_stats "阻止容器端口访问"
read -e -p "请输入容器名: " docker_name
ip_address
block_container_port "$docker_name" "$ipv4_address"
local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq)
check_docker_app_ip
break_end
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
docker_image() {
while true; do
clear
send_stats "Docker镜像管理"
echo "Docker镜像列表"
docker image ls
echo ""
echo "镜像操作"
echo "------------------------"
echo "1. 获取指定镜像 3. 删除指定镜像"
echo "2. 更新指定镜像 4. 删除所有镜像"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "拉取镜像"
read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames
for name in $imagenames; do
echo -e "${gl_huang}正在获取镜像: $name${gl_bai}"
docker pull $name
done
;;
2)
send_stats "更新镜像"
read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames
for name in $imagenames; do
echo -e "${gl_huang}正在更新镜像: $name${gl_bai}"
docker pull $name
done
;;
3)
send_stats "删除镜像"
read -e -p "请输入镜像名(多个镜像名请用空格分隔): " imagenames
for name in $imagenames; do
docker rmi -f $name
done
;;
4)
send_stats "删除所有镜像"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有镜像吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker rmi -f $(docker images -q)
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
}
docker_ipv6_on() {
root_use
install jq
local CONFIG_FILE="/etc/docker/daemon.json"
local REQUIRED_IPV6_CONFIG='{"ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64"}'
# 检查配置文件是否存在,如果不存在则创建文件并写入默认设置
if [ ! -f "$CONFIG_FILE" ]; then
echo "$REQUIRED_IPV6_CONFIG" | jq . >"$CONFIG_FILE"
restart docker
else
# 使用jq处理配置文件的更新
local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")
# 检查当前配置是否已经有 ipv6 设置
local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false')
# 更新配置,开启 IPv6
if [[ "$CURRENT_IPV6" == "false" ]]; then
UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {ipv6: true, "fixed-cidr-v6": "2001:db8:1::/64"}')
else
UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}')
fi
# 对比原始配置与新配置
if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then
echo -e "${gl_huang}当前已开启ipv6访问${gl_bai}"
else
echo "$UPDATED_CONFIG" | jq . >"$CONFIG_FILE"
restart docker
fi
fi
}
docker_ipv6_off() {
root_use
install jq
local CONFIG_FILE="/etc/docker/daemon.json"
# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${gl_hong}配置文件不存在${gl_bai}"
return
fi
# 读取当前配置
local ORIGINAL_CONFIG=$(<"$CONFIG_FILE")
# 使用jq处理配置文件的更新
local UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq 'del(.["fixed-cidr-v6"]) | .ipv6 = false')
# 检查当前的 ipv6 状态
local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false')
# 对比原始配置与新配置
if [[ "$CURRENT_IPV6" == "false" ]]; then
echo -e "${gl_huang}当前已关闭ipv6访问${gl_bai}"
else
echo "$UPDATED_CONFIG" | jq . >"$CONFIG_FILE"
restart docker
echo -e "${gl_huang}已成功关闭ipv6访问${gl_bai}"
fi
}
send_stats() {
if [ "$ENABLE_STATS" == "false" ]; then
return
fi
local country=$(curl -s ipinfo.io/country)
local os_info=$(grep PRETTY_NAME /etc/os-release | cut -d '=' -f2 | tr -d '"')
local cpu_arch=$(uname -m)
(
curl -s -X POST "https://api.kejilion.pro/api/log" \
-H "Content-Type: application/json" \
-d "{\"action\":\"$1\",\"timestamp\":\"$(date -u '+%Y-%m-%d %H:%M:%S')\",\"country\":\"$country\",\"os_info\":\"$os_info\",\"cpu_arch\":\"$cpu_arch\",\"version\":\"$sh_v\"}" \
&>/dev/null
) &
}
linux_docker() {
while true; do
clear
# send_stats "docker管理"
echo -e "Docker管理"
docker_tato
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理"
echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理"
echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}8. ${gl_bai}更换Docker源"
echo -e "${gl_kjlan}9. ${gl_bai}编辑daemon.json文件"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}开启Docker-ipv6访问"
echo -e "${gl_kjlan}12. ${gl_bai}关闭Docker-ipv6访问"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境"
echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
clear
send_stats "安装docker环境"
install_add_docker
;;
2)
clear
local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
local image_count=$(docker images -q 2>/dev/null | wc -l)
local network_count=$(docker network ls -q 2>/dev/null | wc -l)
local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)
send_stats "docker全局状态"
echo "Docker版本"
docker -v
docker compose version
echo ""
echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} "
docker image ls
echo ""
echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}"
docker ps -a
echo ""
echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}"
docker volume ls
echo ""
echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}"
docker network ls
echo ""
;;
3)
docker_ps
;;
4)
docker_image
;;
5)
while true; do
clear
send_stats "Docker网络管理"
echo "Docker网络列表"
echo "------------------------------------------------------------"
docker network ls
echo ""
echo "------------------------------------------------------------"
container_ids=$(docker ps -q)
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
for container_id in $container_ids; do
local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
local container_name=$(echo "$container_info" | awk '{print $1}')
local network_info=$(echo "$container_info" | cut -d' ' -f2-)
while IFS= read -r line; do
local network_name=$(echo "$line" | awk '{print $1}')
local ip_address=$(echo "$line" | awk '{print $2}')
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
done <<<"$network_info"
done
echo ""
echo "网络操作"
echo "------------------------"
echo "1. 创建网络"
echo "2. 加入网络"
echo "3. 退出网络"
echo "4. 删除网络"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "创建网络"
read -e -p "设置新网络名: " dockernetwork
docker network create $dockernetwork
;;
2)
send_stats "加入网络"
read -e -p "加入网络名: " dockernetwork
read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames
for dockername in $dockernames; do
docker network connect $dockernetwork $dockername
done
;;
3)
send_stats "加入网络"
read -e -p "退出网络名: " dockernetwork
read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames
for dockername in $dockernames; do
docker network disconnect $dockernetwork $dockername
done
;;
4)
send_stats "删除网络"
read -e -p "请输入要删除的网络名: " dockernetwork
docker network rm $dockernetwork
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
6)
while true; do
clear
send_stats "Docker卷管理"
echo "Docker卷列表"
docker volume ls
echo ""
echo "卷操作"
echo "------------------------"
echo "1. 创建新卷"
echo "2. 删除指定卷"
echo "3. 删除所有卷"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "新建卷"
read -e -p "设置新卷名: " dockerjuan
docker volume create $dockerjuan
;;
2)
read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans
for dockerjuan in $dockerjuans; do
docker volume rm $dockerjuan
done
;;
3)
send_stats "删除所有卷"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker volume prune -f
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
7)
clear
send_stats "Docker清理"
read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker system prune -af --volumes
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
8)
clear
send_stats "Docker源"
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
;;
9)
clear
install nano
mkdir -p /etc/docker && nano /etc/docker/daemon.json
restart docker
;;
11)
clear
send_stats "Docker v6 开"
docker_ipv6_on
;;
12)
clear
send_stats "Docker v6 关"
docker_ipv6_off
;;
19)
docker_ssh_migration
;;
20)
clear
send_stats "Docker卸载"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker ps -a -q | xargs -r docker rm -f && docker images -q | xargs -r docker rmi && docker network prune -f && docker volume prune -f
remove docker docker-compose docker-ce docker-ce-cli containerd.io
rm -f /etc/docker/daemon.json
hash -r
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
0)
kejilion
;;
*)
echo "无效的输入!"
;;
esac
break_end
done
}
linux_docker() {
while true; do
clear
# send_stats "docker管理"
echo -e "Docker管理"
docker_tato
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}1. ${gl_bai}安装更新Docker环境 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}2. ${gl_bai}查看Docker全局状态 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}3. ${gl_bai}Docker容器管理 ${gl_huang}${gl_bai}"
echo -e "${gl_kjlan}4. ${gl_bai}Docker镜像管理"
echo -e "${gl_kjlan}5. ${gl_bai}Docker网络管理"
echo -e "${gl_kjlan}6. ${gl_bai}Docker卷管理"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}7. ${gl_bai}清理无用的docker容器和镜像网络数据卷"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}8. ${gl_bai}更换Docker源"
echo -e "${gl_kjlan}9. ${gl_bai}编辑daemon.json文件"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}11. ${gl_bai}开启Docker-ipv6访问"
echo -e "${gl_kjlan}12. ${gl_bai}关闭Docker-ipv6访问"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}19. ${gl_bai}备份/迁移/还原Docker环境"
echo -e "${gl_kjlan}20. ${gl_bai}卸载Docker环境"
echo -e "${gl_kjlan}------------------------"
echo -e "${gl_kjlan}0. ${gl_bai}返回主菜单"
echo -e "${gl_kjlan}------------------------${gl_bai}"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
clear
send_stats "安装docker环境"
install_add_docker
;;
2)
clear
local container_count=$(docker ps -a -q 2>/dev/null | wc -l)
local image_count=$(docker images -q 2>/dev/null | wc -l)
local network_count=$(docker network ls -q 2>/dev/null | wc -l)
local volume_count=$(docker volume ls -q 2>/dev/null | wc -l)
send_stats "docker全局状态"
echo "Docker版本"
docker -v
docker compose version
echo ""
echo -e "Docker镜像: ${gl_lv}$image_count${gl_bai} "
docker image ls
echo ""
echo -e "Docker容器: ${gl_lv}$container_count${gl_bai}"
docker ps -a
echo ""
echo -e "Docker卷: ${gl_lv}$volume_count${gl_bai}"
docker volume ls
echo ""
echo -e "Docker网络: ${gl_lv}$network_count${gl_bai}"
docker network ls
echo ""
;;
3)
docker_ps
;;
4)
docker_image
;;
5)
while true; do
clear
send_stats "Docker网络管理"
echo "Docker网络列表"
echo "------------------------------------------------------------"
docker network ls
echo ""
echo "------------------------------------------------------------"
container_ids=$(docker ps -q)
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
for container_id in $container_ids; do
local container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
local container_name=$(echo "$container_info" | awk '{print $1}')
local network_info=$(echo "$container_info" | cut -d' ' -f2-)
while IFS= read -r line; do
local network_name=$(echo "$line" | awk '{print $1}')
local ip_address=$(echo "$line" | awk '{print $2}')
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
done <<<"$network_info"
done
echo ""
echo "网络操作"
echo "------------------------"
echo "1. 创建网络"
echo "2. 加入网络"
echo "3. 退出网络"
echo "4. 删除网络"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "创建网络"
read -e -p "设置新网络名: " dockernetwork
docker network create $dockernetwork
;;
2)
send_stats "加入网络"
read -e -p "加入网络名: " dockernetwork
read -e -p "那些容器加入该网络(多个容器名请用空格分隔): " dockernames
for dockername in $dockernames; do
docker network connect $dockernetwork $dockername
done
;;
3)
send_stats "加入网络"
read -e -p "退出网络名: " dockernetwork
read -e -p "那些容器退出该网络(多个容器名请用空格分隔): " dockernames
for dockername in $dockernames; do
docker network disconnect $dockernetwork $dockername
done
;;
4)
send_stats "删除网络"
read -e -p "请输入要删除的网络名: " dockernetwork
docker network rm $dockernetwork
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
6)
while true; do
clear
send_stats "Docker卷管理"
echo "Docker卷列表"
docker volume ls
echo ""
echo "卷操作"
echo "------------------------"
echo "1. 创建新卷"
echo "2. 删除指定卷"
echo "3. 删除所有卷"
echo "------------------------"
echo "0. 返回上一级选单"
echo "------------------------"
read -e -p "请输入你的选择: " sub_choice
case $sub_choice in
1)
send_stats "新建卷"
read -e -p "设置新卷名: " dockerjuan
docker volume create $dockerjuan
;;
2)
read -e -p "输入删除卷名(多个卷名请用空格分隔): " dockerjuans
for dockerjuan in $dockerjuans; do
docker volume rm $dockerjuan
done
;;
3)
send_stats "删除所有卷"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定删除所有未使用的卷吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker volume prune -f
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
*)
break # 跳出循环,退出菜单
;;
esac
done
;;
7)
clear
send_stats "Docker清理"
read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker system prune -af --volumes
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
8)
clear
send_stats "Docker源"
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
;;
9)
clear
install nano
mkdir -p /etc/docker && nano /etc/docker/daemon.json
restart docker
;;
11)
clear
send_stats "Docker v6 开"
docker_ipv6_on
;;
12)
clear
send_stats "Docker v6 关"
docker_ipv6_off
;;
19)
docker_ssh_migration
;;
20)
clear
send_stats "Docker卸载"
read -e -p "$(echo -e "${gl_hong}注意: ${gl_bai}确定卸载docker环境吗?(Y/N): ")" choice
case "$choice" in
[Yy])
docker ps -a -q | xargs -r docker rm -f && docker images -q | xargs -r docker rmi && docker network prune -f && docker volume prune -f
remove docker docker-compose docker-ce docker-ce-cli containerd.io
rm -f /etc/docker/daemon.json
hash -r
;;
[Nn]) ;;
*)
echo "无效的选择,请输入 Y 或 N。"
;;
esac
;;
0)
kejilion
;;
*)
echo "无效的输入!"
;;
esac
break_end
done
}
kejilion() {
exit 0
# cd ~
# kejilion_sh
}
case "$1" in
linux_docker)
linux_docker
;;
*)
echo "Usage: bash docker.sh linux_docker"
;;
esac
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论