Почему мой скрипт на python, который импортирует пакет docker-py (ссылка ниже), выдает ошибку, а не запускает мой докер-контейнер? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь использовать 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_HOST, DOCKER_TLS_VERIFY, DOCKER_CERT_PATH, потому что, насколько я знаю, я запускаю docker на своей машине обычным способом.)

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, я также могу отправить Dockerfile, используемый для построения образа, который предоставляет порты и имеет команду

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

Однако я пробовал другие изображения и имя изображения, которое включает репо, и ошибка всегда одинакова независимо от изображения!

Я также пробовал другие команды из этого пакета, но происходит то же самое.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Понижение версии пакета моих запросов с 2.22 до 2.15 с использованием pip3 uninstall requests и pip3 install requests==2.15 решило эту проблему.

0 голосов
/ 25 июня 2019

Я думаю, вам нужно указать правильное имя изображения, например:

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

, и убедитесь, что у вас установлена ​​последняя версия пакета requests:

pip3 install -U requests
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...