From a318f1d97b9701ba3d1629c9b7c434056de5b6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Mon, 8 Sep 2025 18:32:04 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=88=A0=E9=99=A4=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=20Docker=20daemon=20=E9=85=8D=E7=BD=AE=E7=9A=84=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- h-hosts-docker.sh | 100 ---------------------------------------------- 1 file changed, 100 deletions(-) delete mode 100644 h-hosts-docker.sh diff --git a/h-hosts-docker.sh b/h-hosts-docker.sh deleted file mode 100644 index 5835576..0000000 --- a/h-hosts-docker.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -# ============================================================================== -# update-docker-daemon.sh -# -# 安全地向 Docker 的 daemon.json 配置文件中添加或更新 --add-host 条目。 -# -# 依赖: jq (一个轻量级的命令行 JSON 处理器) -# -# 用法: -# sudo ./update-docker-daemon.sh "host1:ip1" "host2:ip2" ... -# -# 示例: -# sudo ./update-docker-daemon.sh "dev.site.com:192.168.1.100" "api.internal:10.0.0.12" -# ============================================================================== - -# -- 安全检查 -- - -# 1. 检查是否以 root 或 sudo 权限运行 -if [ "$(id -u)" -ne 0 ]; then - echo "❌ 错误: 此脚本需要以 root 或 sudo 权限运行。" - echo "请尝试使用: sudo $0" - exit 1 -fi - -# 2. 检查 jq 是否已安装 -if ! command -v jq &> /dev/null; then - echo "❌ 错误: 依赖 'jq' 未找到。" - echo "请先安装 jq。例如: sudo apt-get install jq" - exit 1 -fi - -# 3. 检查是否提供了参数 -if [ "$#" -eq 0 ]; then - echo "📝 用法: $0 \"host1:ip1\" \"host2:ip2\" ..." - echo "示例: sudo $0 \"dev.site.com:192.168.1.100\"" - exit 1 -fi - -# -- 配置和变量 -- - -DAEMON_FILE="/etc/docker/daemon.json" - -# -- 主逻辑 -- - -# 1. 确保配置文件及其目录存在 -mkdir -p "$(dirname "$DAEMON_FILE")" -if [ ! -f "$DAEMON_FILE" ] || [ ! -s "$DAEMON_FILE" ]; then - echo "{}" > "$DAEMON_FILE" - echo "🔔 提示: '$DAEMON_FILE' 文件不存在或为空,已为你创建。" -fi - -# 验证 JSON 文件格式,如果无效则重新创建 -if ! jq empty "$DAEMON_FILE" 2>/dev/null; then - echo "⚠️ 警告: '$DAEMON_FILE' 包含无效的 JSON,正在重新创建..." - echo "{}" > "$DAEMON_FILE" -fi - -# 2. 备份当前配置文件 -BACKUP_FILE="$DAEMON_FILE.bak-$(date +%Y%m%d_%H%M%S)" -cp "$DAEMON_FILE" "$BACKUP_FILE" -echo "📄 已将当前配置备份到 '$BACKUP_FILE'" - -# 3. 将所有命令行参数转换为 jq 可以使用的 JSON 数组 -# 例如: "host1:ip1" "host2:ip2" -> '["host1:ip1", "host2:ip2"]' -hosts_to_add_json=$(jq -n '$ARGS.positional' --args "$@") - -# 4. 使用 jq 更新 JSON 文件 -# - (.add_host // []): 如果 `add_host` 存在,则使用它;如果不存在 (null),则使用一个空数组 `[]`。 -# - + $hosts_to_add: 将新主机列表与现有列表合并。 -# - | unique: 移除所有重复的条目。 -# - | del(select(.==null)): 清理可能因为没有旧值而产生的 null -# - 最后将结果赋值回 .add_host -updated_json=$(jq \ - --argjson hosts_to_add "$hosts_to_add_json" \ - '.add_host = ((.add_host // []) + $hosts_to_add | unique | del(select(.==null)))' \ - "$BACKUP_FILE") - -# 5. 将格式化后的 JSON 写回主文件 -echo "$updated_json" > "$DAEMON_FILE" - -# 6. 显示修改前后的差异 -echo "🔄 检查文件变更:" -if diff -u "$BACKUP_FILE" "$DAEMON_FILE" > /dev/null; then - echo "✅ 配置未发生变化,所有条目均已存在。" -else - echo "✅ 成功更新 '$DAEMON_FILE'!" - echo "变更详情:" - diff -u "$BACKUP_FILE" "$DAEMON_FILE" -fi - -# -- 完成 -- - -echo "" -echo "✨ 操作完成!" -echo "🔴 重要: 你必须重启 Docker 守护进程才能使更改生效。" -echo " 请运行:" -echo " sudo systemctl daemon-reload" -echo " sudo systemctl restart docker" -echo "" \ No newline at end of file