如何使用yq向现有/etc/docker/daemon.json文件追加代理配置
问题描述
现有/etc/docker/daemon.json文件内容如下:
$ yq . /etc/docker/daemon.json { "dns": [ "a.b.c.d1" ] } $
尝试两条yq命令追加代理配置均失败:
第一条命令及错误:
$ yq '. + { proxies : { "http-proxy":env($http_proxy) , "https-proxy":env($https_proxy) , "no-proxy":env($no_proxy)} }' /etc/docker/daemon.json Error: 1:7: invalid input text "proxies : { \"ht..." $
第二条命令及错误:
$ yq '. + { .proxies = { .http-proxy=env($http_proxy) , .https-proxy=env($https_proxy) , .no-proxy=env($no_proxy)} }' /etc/docker/daemon.json Error: !!str () cannot be added to a !!map () $
期望生成的JSON结果:
{ "dns": [ "a.b.c.d1" ], "proxies": { "http-proxy": "http://x.y.z.t:8080", "https-proxy": "http://x.y.z.t:8080", "no-proxy": "localhost,127.0.0.1,localaddress,.localdomain.com" } }
解决方案
使用以下命令即可实现需求:
yq '.proxies = { "http-proxy": env($http_proxy), "https-proxy": env($https_proxy), "no-proxy": env($no_proxy) }' /etc/docker/daemon.json
若需要直接修改原文件(原地编辑),添加-i参数:
yq -i '.proxies = { "http-proxy": env($http_proxy), "https-proxy": env($https_proxy), "no-proxy": env($no_proxy) }' /etc/docker/daemon.json
错误原因解析
- 第一条命令:构造map时
proxies与冒号之间的多余空格违反了严格的JSON语法解析规则,导致yq无法识别。此外直接使用赋值而非合并操作,逻辑更简洁不易出错。 - 第二条命令:在
{}内部错误使用了.proxies =这种赋值语句,map内部应该是键值对形式,而非赋值表达式,导致yq无法将其解析为合法map,进而报错无法与原文件的map结构合并。
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

