NetBeans Docker服务凭证异常:凭证存储与CLI/Windows Docker应用冲突
我之前踩过这个一模一样的坑!NetBeans的Docker插件和Windows上Docker默认的凭证存储机制不兼容,导致读取凭证时抛出NullPointerException,就是你贴的这个异常堆栈:
Stacktrace:
java.lang.NullPointerException at java.util.Base64$Decoder.decode(Base64.java:549)
at org.netbeans.modules.docker.DockerConfig.createCredentials(DockerConfig.java:321)
at org.netbeans.modules.docker.DockerConfig.getAllCredentials(DockerConfig.java:127)
at org.netbeans.modules.docker.api.CredentialsManager.getAllCre...
问题根源
Windows上Docker CLI默认用wincred(Windows Credential Manager)存储镜像仓库的凭证,但NetBeans的Docker插件在读取这种方式存储的凭证时,会错误地拿到null值,传给Base64解码器就触发了空指针异常。
具体解决步骤
- 找到你的Docker配置文件:路径是
C:\Users\<你的用户名>\.docker\config.json - 打开这个JSON文件,找到
credsStore字段,它的值大概率是wincred - 修改这个字段的值为
desktop.exe,或者直接把这一行注释掉(如果不需要全局凭证存储的话) - 保存配置文件后,重启NetBeans和Docker Desktop,再尝试连接Docker
补充说明
改成desktop.exe是让Docker使用Docker Desktop内置的凭证存储机制,NetBeans插件对这个格式的兼容性更好,能正确读取凭证内容,就不会再出现Base64解码的空指针问题了。如果注释掉credsStore,Docker会把凭证明文存在config.json里,虽然能解决问题,但安全性稍差,更推荐用desktop.exe的方式。
内容的提问来源于stack exchange,提问作者Arul Dhandapani

