Windows(WSL后端)Docker配置客户端证书登录仓库报400问题咨询
问题描述
连接需要客户端证书认证的私有镜像仓库时,Ubuntu环境下按照Docker配置说明,把client.crt、client.key文件放到/etc/docker/certs.d/<myregistry>/目录下即可正常使用。
但使用WSL后端的Windows版Docker没有对应场景的明确配置指引,尝试过以下所有方案均未成功:
- 将私钥与证书导入Windows证书管理器,重启Docker服务
- 将证书、密钥文件放入
docker-desktopWSL实例的/etc/docker/certs.d/<myregistry>/路径,重启Docker - 将证书、密钥文件放入
docker-desktop-dataWSL实例的/etc/docker/certs.d/<myregistry>/路径,重启Docker - 将证书、密钥文件放入
docker-desktopWSL实例的/root/.docker/certs.d/<myregistry>/路径,重启Docker - 将证书、密钥文件放入
docker-desktop-dataWSL实例的/root/.docker/certs.d/<myregistry>/路径,重启Docker
所有尝试执行登录操作时都会返回相同报错,执行的命令及返回结果如下:
PS C:\> docker login -u <remote_user> <myregistry> Password: Error response from daemon: login attempt to https://<myregistry>/v2/ failed with status: 400 Bad Request
解决步骤
WSL后端的Docker Desktop不会读取WSL实例内部的证书配置,也不识别Windows系统证书管理器中导入的客户端证书,它实际加载客户端证书的路径是Windows宿主机当前用户目录下的配置文件夹,按以下步骤操作即可解决:
- 打开Windows资源管理器,在地址栏输入
C:\Users\<你的Windows登录用户名>\.docker\回车进入,如果目录下没有certs.d文件夹,手动新建该文件夹 - 进入
certs.d目录,新建与镜像仓库地址完全匹配的子文件夹:如果仓库地址为myregistry.com,则文件夹命名为myregistry.com;如果仓库使用非默认HTTPS端口(比如myregistry.com:8443),文件夹名必须带上端口号,命名为myregistry.com:8443 - 将
client.crt、client.key,以及仓库对应的CA根证书ca.crt(如有)复制到刚创建的仓库对应子文件夹中 - 右键点击系统托盘中的Docker Desktop图标,选择「Restart」等待Docker服务完全重启
- 重启完成后重新执行
docker login命令即可正常通过客户端证书认证
注意:
docker-desktop和docker-desktop-data是Docker Desktop自动托管的WSL系统实例,每次服务重启都会重置所有手动修改的内容,往这两个实例里放配置文件属于无效操作,不会生效。
内容的提问来源于stack exchange,提问作者jeromerg
相关产品推荐
相关产品推荐

