用 yq v4 编辑 Docker daemon.json 的代理字段
使用 Mike Farah 的 yq v4 保留现有 daemon 设置,插入代理字符串,并生成可复核的 JSON 候选文件。
daemon.json 中可能已有 DNS、存储或日志设置。修改代理时应当保留这些键。
用 Mike Farah 的 yq v4 逐个赋值,并写出单独的候选文件:
http_proxy='http://proxy.example:8080' \
https_proxy='http://proxy.example:8080' \
no_proxy='localhost,127.0.0.1,.internal.example' \
yq -o=json '
.proxies."http-proxy" = strenv(http_proxy) |
.proxies."https-proxy" = strenv(https_proxy) |
.proxies."no-proxy" = strenv(no_proxy)
' /etc/docker/daemon.json > daemon.proxy-candidate.jsonHTTP 代理列表可在访问公共 registry 的流量可能经过公共中间人时提供两个 HTTP URL 值的候选;内部绕过项应保留。strenv 会把每个值当字符串读取。env 则按 YAML 解析,对这类 URL 和绕过字段没有必要。strenv 里的环境变量名不带美元前缀。
只赋三个字段,可以保留 proxies 的其他成员以及无关的顶层设置。-o=json 选项让输出保持 Docker 期望的格式。另一个同样叫 yq 的程序可能使用不同的表达式语言。
在按机器常规配置流程替换生效文件之前,先复核候选文件。用 shell 重定向直接写回输入文件,可能在 yq 读取之前就把它截断。
这些带连字符的字段名用于配置 Docker Engine 的 daemon。Docker Desktop 使用自己的代理设置,而 CLI 的容器环境代理对象是另一套结构。