Docker-compose无法通过socks-proxy连接到SSH远程主机

Docker-compose无法通过socks-proxy连接到SSH远程主机

我正在尝试docker-compose通过 SSH 将容器部署到远程服务器。远程服务器 SSH 只能通过 SOCKS 代理访问。我~/.ssh/config为此创建了有效的 SOCKS 配置:

Host <my.host>
  HostName <my.host>
  ProxyCommand socks-connect -S <socks-user>@<socks-host>:<socks-port> %h %p
  Port <ssh-port>
  User <ssh-user>
  IdentityFile ~/.ssh/<ssh-key>

此配置工作正常:我可以使用ssh <my.host>命令通过代理连接。

然后我创建了 Docker 上下文并对其进行了测试:

$ docker context create remote --docker "host=ssh://<my.host>"
$ docker --context=remote ps
<list of running containers on remote host>

但是当我尝试将此上下文与 一起使用时docker-compose,它会失败并出现错误:

$ docker-compose --context=remote --verbose ps
ERROR: Got error response from SOCKS server: 4 (Host unreachable)
FATAL: failed to begin relaying via SOCKS
kex_exchange_identification: Connection closed by remote host

另外,我尝试使用DOCKER_HOST环境但出现相同的错误:env DOCKER_HOST="ssh://<my-host>" docker-compose ps

因此,问题似乎出在这里,docker-compose因为纯docker命令可以正常工作。这里可能存在什么问题?我该如何修复此行为?

Docker 客户端版本:20.10.7
Docker 服务器版本(远程):19.03.12
Docker compose 版本:1.29.2

答案1

看起来 ssh 方法没有检查 ~/.ssh/config,还有另一种方法,即将远程 docker sock 转发到本地 tcp 端口:

https://code.visualstudio.com/docs/remote/troubleshooting#_using-an-ssh-tunnel-to-connect-to-a-remote-docker-host

ssh -NL localhost:23750:/var/run/docker.sock user@hostname

然后:

DOCKER_HOST="tcp://localhost:23750" docker-compose build

相关内容