如何使用 yq 将代理项附加到现有的 /etc/docker/daemon.json 文件

问题描述 投票:0回答:1

我有以下

/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
命令:

$ 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
做到这一点?

json append yq
1个回答
0
投票

显然,您使用的是 mikefarah/yq,它要求对象键用引号引起来,因此将

proxies:
更改为
"proxies":
。此外,
env
期望其参数不带
$
符号。因此,举个例子,这是有效的:

http_proxy=a https_proxy=b no_proxy=c yq -o=json '
  . + {"proxies": {"http-proxy": env(http_proxy), "https-proxy": env(https_proxy), "no-proxy": env(no_proxy)}}
' /etc/docker/daemon.json
{
  "dns": [
    "a.b.c.d1"
  ],
  "proxies": {
    "http-proxy": "a",
    "https-proxy": "b",
    "no-proxy": "c"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.