如何让docker buildx的ADD指令信任自定义CA证书?
解决Docker Buildx ADD指令信任自定义CA证书的问题
问题背景
使用Docker Buildx从自定义CA签发证书的内部Artifactory服务器拉取镜像(FROM指令)时正常,但使用ADD指令下载该服务器上的制品时,触发x509: certificate signed by unknown authority错误。
核心原因
你配置的buildkit.toml中[registry."dockerhub.xxxx.internal"]下的ca选项,仅对**Docker镜像拉取(如FROM指令)**生效,用于验证镜像仓库的证书。而ADD指令发起的HTTP下载请求,由Buildkit进程直接处理,会使用Buildkit自身的全局CA信任池,因此需要单独配置全局CA信任。
解决方案
方法1:修改Buildkitd全局CA配置
将自定义CA证书添加到Buildkit的全局信任池中,让所有Buildkit发起的HTTP请求(包括ADD指令的下载)信任该CA。
修改buildkitd.toml,添加全局CA配置:
[registry."dockerhub.xxxx.internal"] ca=["./My-Custom-CA.pem"] [worker.oci] ca-certificates = ["./My-Custom-CA.pem"]
重新创建Buildx Builder并执行构建:
docker buildx create --use --config buildkitd.toml docker buildx build --load .
方法2:构建时通过环境变量传递CA证书
无需修改Buildkit配置,直接在构建命令中通过环境变量指定自定义CA:
docker buildx build --load --build-arg SSL_CERT_FILE=$(pwd)/My-Custom-CA.pem .
若需更安全的方式,可通过secret传递证书:
docker buildx build --load --secret id=custom_ca,src=My-Custom-CA.pem --build-arg SSL_CERT_FILE=/run/secrets/custom_ca .
方法3:创建Builder时挂载CA到系统信任目录
创建Buildx Builder时,将自定义CA挂载到Buildkit容器的系统信任目录:
docker buildx create --use \ --config buildkitd.toml \ --mount type=bind,src=$(pwd)/My-Custom-CA.pem,dst=/etc/ssl/certs/My-Custom-CA.pem,readonly
之后执行正常构建命令即可。
内容的提问来源于stack exchange,提问作者jhericks
相关产品推荐
相关产品推荐

