Docker-Compose kann keine Verbindung über Socks-Proxy zum SSH-Remote-Host herstellen

Docker-Compose kann keine Verbindung über Socks-Proxy zum SSH-Remote-Host herstellen

Ich versuche, Container docker-composeüber SSH auf einem Remote-Server bereitzustellen. Auf den Remote-Server SSH kann nur über einen SOCKS-Proxy zugegriffen werden. Ich habe ~/.ssh/configdafür eine gültige SOCKS-Konfiguration erstellt:

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>

Diese Konfiguration funktioniert einwandfrei: Ich kann mit ssh <my.host>einem Befehl eine Verbindung über einen Proxy herstellen.

Dann habe ich den Docker-Kontext erstellt und getestet:

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

Aber wenn ich versuche, diesen Kontext mit zu verwenden docker-compose, schlägt dies mit folgendem Fehler fehl:

$ 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

Außerdem habe ich versucht, DOCKER_HOSTdie Umgebung zu verwenden, aber es trat der gleiche Fehler auf: env DOCKER_HOST="ssh://<my-host>" docker-compose ps.

Das Problem scheint also darin zu liegen, docker-composedass Pure docker-Befehle korrekt funktionieren. Was könnte hier das Problem sein und wie kann ich dieses Verhalten beheben?

Docker-Client-Version: 20.10.7
Docker-Server-Version (remote): 19.03.12
Docker-Compose-Version:1.29.2

Antwort1

Sieht aus, als ob die SSH-Methode ~/.ssh/config nicht geprüft hat. Es gibt eine andere Möglichkeit, indem man Remote-Docker-Socket an den lokalen TCP-Port weiterleitet:

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

Dann:

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

verwandte Informationen