使用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中的双引号完全消失,且字符间存在隐藏零宽字符:
{ key1: value_1, key2: value_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
相关产品推荐
相关产品推荐

