Я все еще новичок в докере, и я пытаюсь сделать что-то вроде этого:
from sshtunnel import SSHTunnelForwarder
import docker
server = SSHTunnelForwarder(
'didi',
ssh_username = "george",
ssh_password = "ice",
remote_bind_address=('192.168.56.103',22),
local_bind_address =('unix:///var/run/docker.sock')
)
server.start()
print(server.local_bind_port)
client = docker.from_env()
server.stop()
я получаю ValueError: Платформа не поддерживает сокеты домена UNIX. и в то же время я не нашел «безопасного» способа позволить докеру прослушивать локальный порт.
Кто-нибудь знает простой обходной путь для решения этой проблемы? спасибо
наоборот. я имею в виду, что пытаюсь добраться до докера, который находится на другой машине.
('didi' => 192.168.56.103',22) - машина, на которой включен докер. Я хочу добраться до него по ssh. всякий раз, когда я убираю local_bind_address, я могу получить доступ к машине через ssh, но я не могу найти способ запустить докер
Если вы пытаетесь получить доступ к Docker на удаленной машине, вам нужно будет перенаправить порт на вашей локальной машине на сокет Docker на удаленной машине. Вы можете сделать это с помощью командной строки ssh
следующим образом:
ssh -L 4321:/var/run/docker.sock 192.168.56.103
Пока это соединение активно, вы можете получить доступ к Docker через локальный порт 4321:
docker -H tcp://localhost:4321 ps
К сожалению, пакет sshtunnel
не поддерживает такое перенаправление доступа к удаленному сокету Unix (см. документацию API для параметров local_bind_address
и remote_bind_address
).
Но вам повезло! Вам не нужно вручную настраивать такое перенаправление портов; Docker может самостоятельно подключаться к удаленному хосту через ssh, установив для переменной среды DOCKER_HOST
URL-адрес ssh
:
$ export DOCKER_HOST=ssh://192.168.56.103
$ python
Python 3.9.0 (default, Oct 6 2020, 00:00:00)
[GCC 10.2.1 20200826 (Red Hat 10.2.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> c = docker.from_env()
>>> info = c.info()
>>> info['ServerVersion']
'19.03.13'
Вы пытаетесь предоставить удаленному серверу доступ к вашему локальному докеру? Или наоборот? Кроме того, вы, кажется, используете
22
в качестве порта в своемremote_bind_address
, который не будет работать... порт 22 используетсяssh
и уже будет использоваться.