使用 SSHTunnelForwarder 远程访问 docker

reach docker over remote using SSHTunnelForwarder

我还是 docker 的新手,我正在尝试做这样的事情:

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 域套接字。同时我没有找到让 docker 监听本地端口的“安全”方法。

有谁知道解决此问题的简单解决方法?谢谢

如果您尝试访问远程计算机上的 Docker,您需要将 local 计算机上的端口转发到 Docker 套接字在远程机器上。您可以使用 ssh 命令行执行此操作,如下所示:

ssh -L 4321:/var/run/docker.sock 192.168.56.103

只要该连接处于活动状态,您就可以在本地端口 4321 上访问 Docker:

docker -H tcp://localhost:4321 ps

不幸的是,sshtunnel 包不支持像这样转发对远程 Unix 套接字的访问(有关 local_bind_addressremote_bind_address 选项,请参阅 api documentation)。

但你很幸运!您不需要手动设置这种端口转发; Docker 能够通过 ssh 连接到远程主机,只需将您的 DOCKER_HOST 环境变量设置为 ssh url:

$ 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'