我还是 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 监听本地端口。
有谁知道一个简单的解决方法来解决这个问题?谢谢
答案 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_address
和 remote_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'