相关疑难解决方法(0)

将参数传递给jq过滤器

这是我的config.json:

{
    "env": "dev",
    "dev": {
        "projects" : {
            "prj1": {
                "dependencies": {},
                "description": ""
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的bash命令:

PRJNAME='prj1'

echo $PRJNAME

jq --arg v "$PRJNAME" '.dev.projects."$v"' config.json 
jq '.dev.projects.prj1' config.json 
Run Code Online (Sandbox Code Playgroud)

输出:

prj1
null
{
  "dependencies": {},
  "description": ""
}
Run Code Online (Sandbox Code Playgroud)

所以$ PRJNAME是prj1,但第一次调用只输出null.

有人能帮我吗?

bash json parameter-passing jq

27
推荐指数
4
解决办法
3万
查看次数

Dockerfile 构建从最终映像中删除源代码

我是 Docker 的新手。我想通过使用 make 命令构建一个 C++ 库来构建一个 docker 镜像。我在 Dockerfile 中这样做的方式是

  • 从主机复制源代码
  • 安装所需的包
  • 运行 make
  • 将库 (.so) 复制到图像内的不同文件夹中
  • 删除源代码

Dockerfile 代码写在下面。

我面临的问题是,即使删除了源代码,最终的图像尺寸还是很大。

由于 Dockerfile 的每一行都创建了不同的层,因此有一种方法可以使用 curl 或 wget 下载源代码,然后删除同一层中的源代码。但我不喜欢这个解决方案。

FROM alpine

RUN apk update && apk add <required_packages>

COPY source_code /tmp/source_code

RUN make -C /tmp/source_code && \
        mkdir /libraries/
        cp /tmp/lib/* /libraries/
        rm -rf /tmp/*
Run Code Online (Sandbox Code Playgroud)

我只想最小化最终图像的大小。这是我这样做的正确方法还是有更好的方法?请帮忙。

makefile docker dockerfile alpine-linux

5
推荐指数
2
解决办法
2736
查看次数

如何将docker层变成单层

Docker 镜像创建有多个层,我想将其转换为单层,是否有任何 docker build 命令可以实现此目的?我用谷歌搜索但找不到任何东西

artifactory docker

4
推荐指数
1
解决办法
8499
查看次数

JQ转换为数字,从shell变量生成新的json时转换为boolean

我正在尝试生成 json 输出,其中输入来自 shell 变量。

happystring="Bob Ross"
unhappynumber1="1942"
unhappyboolean=true

JSON=$(jq -n \
        --arg happystring "$happystring" --arg unhappynumber1 "$unhappynumber1" \
        --arg unhappyboolean $unhappyboolean \
        '
        {
            happystring: $happystring,
            unhappynumber1: $unhappynumber1,
            unhappyboolean: $unhappyboolean
        }
        ')

echo "$JSON" | jq
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

{
  "happystring": "Bob Ross",
  "unhappynumber1": "1942",
  "unhappyboolean": "true"
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以用tonumber一个简单的过滤器将字符串转换为数字。但是,我无法弄清楚如何将字符串转换为布尔值。而且我在从 shell vars 采购和创建新的 json 作为输出时无法推理如何做。

期望的输出:

{
  "happystring": "Bob Ross",
  "unhappynumber1": 1942,
  "unhappyboolean": true
}
Run Code Online (Sandbox Code Playgroud)

如果我在一个步骤中生成 json 并将其存储在 shell var 中,然后在第二个步骤中执行额外的转换,会更容易或更清楚吗?

json jq

4
推荐指数
2
解决办法
3074
查看次数