You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程Docker上下文操作失败但SSH连接正常的问题求助

远程Docker上下文操作失败但SSH连接正常的问题求助

我最近碰到个棘手的问题,想请大家帮忙看看:我在本地机器上尝试创建一个指向远程服务器的Docker上下文,执行的命令是这样的:

sudo docker context create contextName --docker "host=ssh://user@domain"
sudo docker context use contextName

切换到这个上下文后,不管执行什么Docker命令(比如sudo docker info),都会弹出Permission denied (publickey)的错误,具体报错信息如下:

$ sudo docker info
Client: Docker Engine - Community
Version: 26.1.3
Context: steste
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.14.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.27.0
Path: /usr/libexec/docker/cli-plugins/docker-compose

Server:
ERROR: error during connect: Get "http://docker.example.com/v1.45/info": command
[ssh -o ConnectTimeout=30 -l user -- domain docker system dial-stdio] has exited
with exit status 255, please make sure the URL is valid, and Docker 18.09 or
later is installed on the remote host: stderr=user@domain: Permission denied (publickey).

奇怪的是,我直接用ssh user@domain是能正常连接到远程服务器的,但一用sudo运行Docker命令就不行了。有没有大佬能指点下怎么解决这个问题?


可能的原因和解决办法

我后来琢磨了下,问题大概率出在sudo切换用户身份后,SSH密钥不匹配上:平时我们用ssh user@domain是用当前本地用户的私钥去连,但sudo后Docker会以root用户的身份发起SSH连接,而root用户的~/.ssh目录里没有对应的私钥,自然就被远程拒绝了。

给大家分享几个可行的解决思路:

方法一:让当前用户拥有Docker操作权限,避免用sudo

这是最推荐的方式,毕竟总用sudo也麻烦:

  • 先检查当前用户是否在docker用户组里:
    groups
    
    看输出里有没有docker这个组,如果没有就继续下一步。
  • 将当前用户添加到docker组:
    sudo usermod -aG docker $USER
    
  • 注销当前用户再重新登录(或者执行newgrp docker临时生效),之后就不用sudo了,直接操作:
    docker context create contextName --docker "host=ssh://user@domain"
    docker context use contextName
    docker info
    

方法二:如果必须用sudo,明确指定SSH身份文件

要是因为某些原因必须用sudo运行Docker,那可以在创建上下文时指定当前用户的私钥路径:

sudo docker context create contextName --docker "host=ssh://user@domain,identityfile=/home/你的本地用户名/.ssh/id_rsa"

注意替换/home/你的本地用户名为你实际的用户目录,同时要确保root用户能读取这个私钥文件(可以执行chmod 600 /home/你的本地用户名/.ssh/id_rsa,并确保~/.ssh目录权限是700)。

额外检查点

  • 确认远程服务器上user用户的~/.ssh/authorized_keys文件里,已经正确添加了本地用户的公钥
  • 检查远程服务器的/etc/ssh/sshd_config配置,确保PubkeyAuthentication设置为yes(一般默认开启,但可以确认下)

备注:内容来源于stack exchange,提问作者shs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:25:28