使用 SSHTunnelForwarder 通过远程访问 docker

时间:2020-12-20 17:45:51

标签: python docker ssh-tunnel

我还是 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 监听本地端口。

有谁知道一个简单的解决方法来解决这个问题?谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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

docker -H tcp://localhost:4321 ps

遗憾的是,sshtunnel 包不支持像这样转发访问远程 Unix 套接字(请参阅 api documentation 以了解 local_bind_addressremote_bind_address 选项)。

但你很幸运!您不需要手动设置这种端口转发;通过将您的 DOCKER_HOST 环境变量设置为 ssh url,Docker 能够自行通过 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'