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

通过Docker API构建镜像传递buildargs参数报错如何解决?

错误原因

该报错是由于URL查询参数中的buildargs对应的JSON字符串未进行URL编码导致的。{、"、:这类JSON特殊字符在URL传输时会被服务端错误解析,最终拿到的JSON结构异常,无法正常反序列化,就会返回"invalid character ':' after top-level value"的错误。

解决方案

方案1:手动编码JSON参数

将{"TIMESTAMP":"time"}做URL编码后得到%7B%22TIMESTAMP%22%3A%22time%22%7D,直接替换原有请求中的buildargs值即可:

curl -X POST -H "Content-Type:application/tar" --unix-socket /var/run/docker.sock --data-binary "@Dockerfile.tar.gz" 'http://localhost/build?buildargs=%7B%22TIMESTAMP%22%3A%22time%22%7D'

方案2:使用curl自动编码(更稳妥)

当buildargs参数较多、或者值中存在特殊字符时,用curl自带的--data-urlencode参数自动处理编码,避免手动转义出错:

curl -X POST -G \
  -H "Content-Type:application/tar" \
  --unix-socket /var/run/docker.sock \
  --data-binary "@Dockerfile.tar.gz" \
  --data-urlencode 'buildargs={"TIMESTAMP":"time"}' \
  'http://localhost/build'

注意参数-G不可省略,作用是将--data-urlencode指定的参数拼接到URL的查询串中,而不是放到请求体里。

补充说明

如果参数传递后没有生效,需要确认你的Dockerfile中在使用TIMESTAMP变量前,已经通过ARG TIMESTAMP声明过该构建参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:24:03