Docker-compose는 양말 프록시를 통해 SSH 원격 호스트에 연결할 수 없습니다.

Docker-compose는 양말 프록시를 통해 SSH 원격 호스트에 연결할 수 없습니다.

docker-composeSSH를 통해 원격 서버에 컨테이너를 배포하려고 합니다 . 원격 서버 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

관련 정보