You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker build-push Action时JSON密钥解析失败问题求助

Docker Build时Secret文件双引号丢失导致JSON解析错误

环境与文件内容

secret.json 文件

{
  "key1": "value_1",
  "key2": "value_2"
}

./src/Dockerfile 文件

# syntax=docker/dockerfile:1
FROM debian:stable-20230904-slim AS downloader

RUN apt update && apt install -y jq

RUN --mount=type=secret,id=secrets \
    cat /run/secrets/secrets | jq -r '.key1'

GitHub Action 配置片段

- name: Build
  uses: docker/build-push-action@v5
  with:
    context: './src/'
    tags: foo/bar:latest
    secret-files: |
      "secrets=./secret.json"  

问题现象

执行Action时收到jq解析错误:

parse error: Invalid numeric literal at line 2, column 7

通过sed查看secret内容时,发现JSON中的双引号完全消失,且字符间存在隐藏零宽字符:

{‌

k‌e‌y‌1‌:‌ ‌v‌a‌l‌u‌e‌_‌1‌,‌
k‌e‌y‌2‌:‌ ‌v‌a‌l‌u‌e‌_‌2‌

}

解决步骤

1. 修正GitHub Action的secret-files配置

移除secret-files行中的多余双引号,YAML块级字符串无需额外引号包裹:

- name: Build
  uses: docker/build-push-action@v5
  with:
    context: './src/'
    tags: foo/bar:latest
    secret-files: |
      secrets=./secret.json

2. 简化Dockerfile中的jq命令

直接让jq读取secret文件,避免管道可能带来的字符转义问题:

RUN --mount=type=secret,id=secrets \
    jq -r '.key1' /run/secrets/secrets

3. 验证secret.json文件的有效性

确保文件使用英文双引号,且无隐藏特殊字符。可以通过以下命令检查:

cat secret.json | hexdump -C

输出中应能看到清晰的"字符(ASCII码0x22),无异常零宽字符(如0xE2 0x80 0x8C)。

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:25:18