【问题标题】:connect to docker hosted on remote server连接到托管在远程服务器上的 docker
【发布时间】:2016-02-29 08:57:37
【问题描述】:

如何使用 python 连接到远程 docker 主机?

>>> from docker import Client
>>> cli = Client(base_url='tcp://52.90.216.176:2375')
>>>
>>> cli.containers()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/docker/api/container.py", line 69, in containers
    res = self._result(self._get(u, params=params), True)
  File "/usr/local/lib/python2.7/site-packages/docker/utils/decorators.py", line 47, in inner
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/docker/client.py", line 112, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 480, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 437, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='52.90.216.176', port=2375): Max retries exceeded with url: /v1.21/containers/json?all=0&limit=-1&trunc_cmd=0&size=0 (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7fd87d836750>: Failed to establish a new connection: [Errno 111] Connection refused',))

如果我登录到 52.90.216.176 并使用以下内容:

>>> cli = Client(base_url='unix://var/run/docker.sock')

这行得通。但是如何连接到另一台服务器上运行的 docker?

【问题讨论】:

标签: python docker


【解决方案1】:

听起来你正在使用 docker-py。

另外,听起来你可能不熟悉 TLS,所以请阅读using TLS with docker-py 的文档。您可能需要下载 TLS 文件并将它们本地复制到 docker-py 客户端,因为它们用于验证您是否有权连接到 Docker 守护进程。

我希望你的远程 Docker 守护进程不会暴露给世界。

如果它没有运行 TLS(暴露给世界):

client = docker.Client(base_url='<https_url>', tls=False)

如果它使用 TLS 保护(不对外公开):

client = docker.Client(base_url='<https_url>', tls=True)

【讨论】:

    【解决方案2】:

    这不是答案,但需要您的反馈。

    报错信息是:Connection refused,那么你可以运行命令吗:

    telnet 52.90.216.176  2375
    

    确认是否没有防火墙问题。有时端口是2376

    【讨论】:

      【解决方案3】:

      向系统配置添加 tcp 选项,如下所示:

      vi /etc/sysconfig/docker
      
      OPTIONS="--host=tcp://0.0.0.0:2375"
      

      重启docker后,我可以使用python连接到远程docker服务器了。

      【讨论】:

      • 请告诉我您没有将端口 2375 暴露给全世界。如果您在亚马逊上运行,人们可以运行机器人来滥用您的服务,这可能会花费您数千美元。
      猜你喜欢
      • 2017-07-13
      • 2014-03-17
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2021-06-05
      相关资源
      最近更新 更多