为什么我的Python脚本会导入Docker-Py软件包(下面链接),而不是运行我的Docker容器



我正在尝试使用https://docker-py.readthedocs.io/en/stable/index.html制作一个Python脚本,该脚本运行我的容器。

安装软件包后(使用import docker导入,我的图像称为" Janus"(,这是我的Python脚本:

import docker
client = docker.from_env()
client.containers.run("janus")

运行脚本时,我会得到


Traceback (most recent call last):
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/util/timeout.py", line 124, in _validate_timeout
    float(value)
TypeError: float() argument must be a string or a number, not 'Timeout'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "test_docker_python_sdk.py", line 3, in <module>
    client.containers.run("janus")
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/models/containers.py", line 803, in run
    detach=detach, **kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/models/containers.py", line 861, in create
    resp = self.client.api.create_container(**create_kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/api/container.py", line 429, in create_container
    return self.create_container_from_config(config, name)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/api/container.py", line 439, in create_container_from_config
    res = self._post_json(u, data=config, params=params)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/api/client.py", line 289, in _post_json
    return self._post(url, data=json.dumps(data2), **kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/docker/api/client.py", line 226, in _post
    return self.post(url, **self._set_request_timeout(kwargs))
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/sessions.py", line 581, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 587, in urlopen
    timeout_obj = self._get_timeout(timeout)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 302, in _get_timeout
    return Timeout.from_float(timeout)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/util/timeout.py", line 154, in from_float
    return Timeout(read=timeout, connect=timeout)
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/util/timeout.py", line 94, in __init__
    self._connect = self._validate_timeout(connect, 'connect')
  File "/home/milanlakhani/.local/lib/python3.6/site-packages/requests/packages/urllib3/util/timeout.py", line 127, in _validate_timeout
    "int, float or None." % (name, value))

也许我错过了一些非常明显的东西,因为我是初学者,但是在Docker-Py文档中,我看不出为什么这不起作用。(我认为我不需要设置环境变量,例如 DOCKER_HOSTDOCKER_TLS_VERIFYDOCKER_CERT_PATH,因为据我所知,我以正常方式在计算机上运行docker。(

请告诉我,如果您需要更多详细信息,我还可以发送用于构建图像的Dockerfile,该图像公开端口并具有命令

CMD /usr/bin/janus -o --configs-folder=/usr/local/share/ct-camera/janus

但是,我尝试了其他图像和图像名称,其中包括存储库,而无论图像如何,错误始终是相同的!

我还尝试了此软件包中的其他命令,但也发生了同样的事情。

我认为您需要提供正确的图像名称 - 像:

client.containers.run("myrepo.com/janus")

并确保拥有最新的requests软件包:

pip3 install -U requests

使用pip3 uninstall requestspip3 install requests==2.15将我的请求软件包的版本从2.22降低到2.15,解决了此问题。

最新更新