我正在嘗試透過 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 連接埠:
ssh -NL localhost:23750:/var/run/docker.sock user@hostname
然後:
DOCKER_HOST="tcp://localhost:23750" docker-compose build