Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
install
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
LaunchDeploy
install
Commits
757c8040
提交
757c8040
authored
11月 03, 2025
作者:
Andy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
12
上级
b68454c5
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
996 行增加
和
63 行删除
+996
-63
1031_Game_JinSha.sh
1031_Game_JinSha.sh
+114
-63
docker.sh
docker.sh
+882
-0
没有找到文件。
1031_Game_JinSha.sh
浏览文件 @
757c8040
...
...
@@ -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
# ------------------ 数组定义菜单项 ------------------
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_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 连接正常"
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
"❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
exit
1
echo
"无效选择。"
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
echo
read
-n
1
-s
-r
-p
"按任意键继续..."
done
docker.sh
0 → 100755
浏览文件 @
757c8040
#!/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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论