跳转到内容

❧ Docker远程连接(SSH方式)

一、核心原理

Docker 远程连接本质是通过 SSH 通道转发 Docker CLI 指令:

Docker CLI → SSH → 远程 Docker Engine

Docker 不直接连服务器,而是依赖 SSH 通道与远程 Engine 通信。


二、前置条件

远程机器必须满足以下条件:

1、Docker 已安装并运行

Terminal window
docker version

执行后必须能同时看到 ClientServer 两段信息。

2、SSH 已可用

Terminal window
ssh user@ip

能正常登录即可。

3、配置 SSH Key(推荐免密登录)

见下方第三节。


三、SSH Key 配置

1、本机生成密钥对

Terminal window
ssh-keygen -t ed25519

2、查看公钥内容

Terminal window
cat ~/.ssh/id_ed25519.pub

3、将公钥写入远程机器

Terminal window
mkdir ~/.ssh
nano ~/.ssh/authorized_keys

将上一步输出的公钥内容粘贴进去并保存。

4、Windows 远程机必须修复权限(否则 SSH 拒绝读取)

Terminal window
icacls $env:USERPROFILE\.ssh /inheritance:r
icacls $env:USERPROFILE\.ssh /grant:r "$env:USERNAME:(F)"
icacls $env:USERPROFILE\.ssh\authorized_keys /inheritance:r

四、Docker 远程连接(核心步骤)

1、创建 Docker Context(SSH 方式)

Terminal window
docker context create remote-docker \
--docker "host=ssh://user@192.168.191.62"

2、查看所有 Context

Terminal window
docker context ls

3、切换到远程 Context

Terminal window
docker context use remote-docker

4、测试连接

Terminal window
docker ps

能正常返回容器列表即表示连接成功。


五、常见问题与解决

问题一:仍然走 TCP 2375 端口

原因: 环境变量 DOCKER_HOST 被设置为 tcp://...,优先级高于 context。

解决:

Terminal window
# PowerShell 中删除该环境变量
Remove-Item Env:DOCKER_HOST

问题二:connection forcibly closed

可能原因:

  • SSH 能登录,但远程 Docker Desktop 未启动
  • 防火墙拦截了 Docker Socket

排查步骤:

  1. 确认远程机器 Docker Desktop 已运行
  2. 检查防火墙是否放行

问题三:切换 context 后不生效

执行以下命令确认当前活跃的 context 旁边有 * 标记:

Terminal window
docker context ls

输出示例:

NAME ... CURRENT
remote-docker ... *

六、VSCode Docker 插件配置

方式一:settings.json

{
"docker.context": "remote-docker"
}

方式二:GUI 操作

Settings → Docker → Context → remote-docker

七、验证是否成功

CLI 验证

Terminal window
docker ps
docker info

VSCode Docker 面板

打开 Docker 插件侧边栏,能正常显示远程机器的:

  • Containers
  • Images
  • Volumes

即表示连接成功。


八、最终效果

配置完成后,本机所有 Docker 命令都将在远程机器上执行:

Terminal window
docker ps
docker logs <container>
docker exec -it <container> bash
docker compose up -d

以上命令均运行在 192.168.191.62 的 Docker Engine 上。


九、最佳实践

方式推荐程度说明
Docker Context + SSH✅ 推荐安全、稳定,与 VSCode 兼容
DOCKER_HOST=tcp://2375❌ 不推荐不安全、不稳定,Windows 易断开,VSCode 不兼容

十、进阶方向(可选)

  • 多服务器 context 管理,按 dev / prod 切换
  • VSCode Remote SSH + Docker 联合使用
  • Docker Compose 直接远程部署
  • CI/CD 流程中远程 build 镜像