Docker-compose無法透過socks-proxy連接到SSH遠端主機

Docker-compose無法透過socks-proxy連接到SSH遠端主機

我正在嘗試透過 SSH 將容器部署docker-compose到遠端伺服器。遠端伺服器 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

相關內容