Docker 通过代理的 SSH 远程上下文
Source: Dev.to
概览
通过 Docker contexts 安全地在 SSH 上管理远程 Docker daemon,并将 SSH 流量通过 SOCKS5 代理转发。
通过为 SSH 配置代理并定义一个通过 SSH 访问远程主机的 Docker context,本地执行的 Docker 命令会透明地转发到远程 Docker daemon。这样,你可以像使用本地 daemon 一样使用标准的 Docker 工作流(docker ps、docker compose、docker build),同时受益于:
- SSH 密钥认证
- 代理强制(SOCKS5 或 HTTP)
- 连接保活机制
SSH 配置
在 ~/.ssh/config 中添加主机模式,使所有匹配的主机自动使用代理和保活设置。
# Apply to all hosts matching vps-*
Host vps-*
ServerAliveInterval 10
ProxyCommand nc --proxy-type socks5 --proxy 127.0.0.1:10808 %h %p
# Specific host for Docker access
Host vps-docker
HostName
User
Port
PreferredAuthentications publickey
- ServerAliveInterval – 定期发送数据包以保持 SSH 连接存活。
- ProxyCommand – 强制 SSH 流量通过本地 SOCKS5 代理(例如 VPN 隧道)。
- PreferredAuthentications publickey – 强制使用公钥认证而非密码认证。
Docker Context
创建一个通过 SSH 连接到远程 daemon 的 Docker context:
docker context create vps-docker-host --docker "host=ssh://vps-docker"
激活该 context:
docker context use vps-docker-host
在激活该 context 后,所有 Docker CLI 命令(docker ps、docker compose、docker build 等)都将针对远程 Docker daemon 而非本地 daemon 运行。