该问题特别适用于 Mac 版 Docker Desktop。
我们的公司网络在所有 SSL 请求中插入中间证书。当我docker build
在连接到网络的情况下运行时,这会导致以下错误:
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Aamazon%2Faws-cli%3Apull&service=registry.docker.io": x509: certificate signed by unknown authority
我尝试添加包含我们中级证书的包,~/.docker/certs.d/auth.docker.io:443/ca.crt
但这并没有解决问题。我尝试了几种auth.docker.io:443
目录命名方法。
如果我在 Linux 机器上,我会将证书附加/etc/pki/tls/certs/ca-bundle.crt
到dockerd 文档但 Mac 上没有这个功能。据我所知,Docker for Mac应该导入钥匙串中的所有证书,但我看到的行为表明并非如此。除了完全禁用 SSL 验证之外,我不知道还能尝试什么,但这肯定不是首选解决方案。
答案1
对于我来说,将注册表添加到不安全选项不起作用,因此我这样做:
我使用 Chrome,
首先,尝试通过浏览器连接您的注册表,只需在地址栏中输入 https:// 地址,然后输入
点击地址旁边的“储物柜”图标,打开证书链窗口,如下图所示
通过将大图标(我在图片上标记的)拖到查找器中,下载所有看起来不受信任的证书(在链中逐一下载)
不受信任的证书将出现在链中,其中带有红色圆圈内的 x(见图)
之后,您应该在 Finder 中获取带有这些证书的文件
使用以下命令将它们全部添加到系统链中:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain downloaded_cert_file
对所有下载的证书文件重复上述命令
接下来输入 [command 键 + 空格键] 并搜索 Keychain Access
打开钥匙串并转到系统证书
找到已安装的证书,双击打开(可能仍然会出现一个里面有“x”的红色圆圈)
点击“信任”下拉箭头
将“使用此证书时”从使用系统默认值更改为始终信任(见下图)
退出窗口,系统将提示用户并保存用户特定的证书设置
重启 Docker 守护进程
答案2
这Mac 的流程是更新 macOS 钥匙串:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
完成此操作后,文档中会出现一个重要提示:
注意:对钥匙串或 ~/.docker/certs.d 目录进行任何更改后,您需要重新启动 Docker Desktop,以使更改生效。