通过SSH执行docker-compose pull失败,本地执行正常求助
解决Windows Docker Desktop SSH远程执行docker-compose pull的凭证错误
这个问题是Windows下Docker的凭证存储机制和SSH远程会话的冲突导致的:本地登录时,Docker依赖Windows Credential Manager保存的凭证,且需要用户的活跃桌面会话权限;而SSH远程连接属于非交互式的独立会话,无法访问当前用户的凭证会话,所以拉取需要认证的镜像时就会报A specified logon session does not exist错误,其他不需要凭证的Docker命令(比如docker ps)则不受影响。
下面是几个可行的解决方法:
方法1:手动在config.json中配置凭证(推荐,一劳永逸)
- 在Docker Hub账号的「Security」设置里生成一个个人访问令牌(权限选拉取镜像所需的即可)
- 打开PowerShell,执行命令生成用户名+令牌的Base64编码(替换成你的实际信息):
[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("你的Docker用户名:生成的访问令牌")) - 在笔记本的用户目录下找到
C:\Users\<你的用户名>\.docker\config.json,如果没有就新建这个文件 - 把以下内容写入
config.json(替换<生成的Base64字符串>):{ "auths": { "https://index.docker.io/v1/": { "auth": "<生成的Base64字符串>" } } }
之后不管是本地还是SSH远程执行docker-compose pull,都会直接读取这个文件里的凭证,绕过Windows Credential Manager。
方法2:远程SSH会话中重新登录Docker(临时方案)
每次通过SSH连接到笔记本后,先执行:
docker login
输入你的Docker用户名和访问令牌(或密码),登录成功后再执行docker-compose pull即可。这个方法的缺点是每次远程连接都要重复登录。
方法3:修改SSH服务权限(不推荐,有安全风险)
如果不在意安全问题,可以让SSH服务访问用户的桌面会话:
- 打开
services.msc,找到「OpenSSH SSH Server」服务 - 右键选择「属性」,切换到「登录」选项卡
- 选择「本地系统账户」,勾选「允许服务与桌面交互」
- 重启SSH服务
这样SSH会话就能访问Windows Credential Manager里的凭证,但这种做法会降低系统安全性,不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者Nulk
相关产品推荐
相关产品推荐

