如何让Docker for Windows生成明文认证密钥,供AEB访问Docker Hub私有镜像?
解决Docker登录后凭据存储在wincred而非config.json的问题(适配Amazon Elastic Beanstalk需求)
我之前也碰到过这个情况——Windows上Docker默认会把登录凭据存在系统的wincred里,导致config.json里的auths字段是空的,没法满足Amazon Elastic Beanstalk(AEB)读取私有镜像凭据的要求。下面是具体的解决步骤:
步骤1:备份现有Docker配置文件
先把当前的config.json备份一份,防止操作出错后无法恢复:
copy %UserProfile%\.docker\config.json %UserProfile%\.docker\config.json.bak
步骤2:修改配置文件移除凭据存储设置
用文本编辑器打开%UserProfile%\.docker\config.json,找到并删除"credsStore": "wincred"这一行(注意如果这行不是JSON的最后一项,要同时删掉它前面或后面的逗号,保证JSON格式合法)。修改后的文件结构大概是这样:
{ "auths": { "https://index.docker.io/v1/": {} }, "HttpHeaders": { "User-Agent": "Docker-Client/17.12.0-ce (windows)" } }
步骤3:重新执行Docker登录
打开命令提示符,运行docker login,按照提示输入你的Docker Hub用户名和密码。这时候因为没有指定凭据存储,Docker会直接将base64编码的用户名密码组合写入config.json的auths字段中。你可以再次打开config.json查看,会看到类似这样的内容:
{ "auths": { "https://index.docker.io/v1/": { "auth": "dXNlcjE6cGFzc3dvcmQxMjM=" } }, "HttpHeaders": { "User-Agent": "Docker-Client/17.12.0-ce (windows)" } }
这个auth字段的值就是AEB需要的凭据内容了。
步骤4:(可选)恢复原有凭据存储配置
如果你之后希望Docker继续使用wincred存储凭据,可以把之前备份的配置文件恢复回去:
copy %UserProfile%\.docker\config.json.bak %UserProfile%\.docker\config.json
简单解释下原理:Windows版Docker默认启用了credsStore配置,会把敏感的登录信息交给系统凭据管理器保管,避免明文存储;但AEB需要直接读取config.json里的auth字段,所以我们需要临时禁用这个配置,让Docker把凭据写入文件中。
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

