Я пытаюсь развернуть контейнеры, используя docker-compose
удаленный сервер через SSH. Доступ к удаленному серверу 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
environment, но получил ту же ошибку: 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