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

関連情報