dockerpy 无法连接到位桶容器内的 docker 守护进程

问题描述

我有以下简单的脚本,主要用于测试 https://github.com/docker/docker-py 是否能够在 bitbucket 容器内运行命令:

import docker

CLIENT = docker.DockerClient(base_url="unix://var/run/docker.sock")

for image in CLIENT.images.list():
    print(image)

以下是我的相关管道阶段:

script:
  - apt-get -y update
  - apt-get install -y git-lfs
  - apt-get install -y libgl1-mesa-glx
  - pip install -r requirements/integration.txt
  - docker images
  - pytest -s -v tests/test_integration_dummy.py

但是我看到像这样奇怪的日志消息:

+ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

+ pytest -s -v tests/test_integration_dummy.py
============================= test session starts ==============================
platform linux -- Python 3.8.7,pytest-6.2.2,py-1.10.0,pluggy-0.13.1 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /opt/atlassian/pipelines/agent/build
plugins: mock-3.5.1,datadir-1.3.1
collecting ... collected 0 items / 1 error

==================================== ERRORS ====================================
_______________ ERROR collecting tests/test_integration_dummy.py _______________
/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py:699: in urlopen
    httplib_response = self._make_request(
/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py:394: in _make_request
    conn.request(method,url,**httplib_request_kw)
/usr/local/lib/python3.8/http/client.py:1255: in request
    self._send_request(method,body,headers,encode_chunked)
/usr/local/lib/python3.8/http/client.py:1301: in _send_request
    self.endheaders(body,encode_chunked=encode_chunked)
/usr/local/lib/python3.8/http/client.py:1250: in endheaders
    self._send_output(message_body,encode_chunked=encode_chunked)
/usr/local/lib/python3.8/http/client.py:1010: in _send_output
    self.send(msg)
/usr/local/lib/python3.8/http/client.py:950: in send
    self.connect()
/usr/local/lib/python3.8/site-packages/docker/transport/unixconn.py:43: in connect
    sock.connect(self.unix_socket)
E   FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception,another exception occurred:
/usr/local/lib/python3.8/site-packages/requests/adapters.py:439: in send
    resp = conn.urlopen(
/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py:755: in urlopen
    retries = retries.increment(
/usr/local/lib/python3.8/site-packages/urllib3/util/retry.py:531: in increment
    raise six.reraise(type(error),error,_stacktrace)
/usr/local/lib/python3.8/site-packages/urllib3/packages/six.py:734: in reraise
    raise value.with_traceback(tb)
/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py:699: in urlopen
    httplib_response = self._make_request(
/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py:394: in _make_request
    conn.request(method,encode_chunked=encode_chunked)
/usr/local/lib/python3.8/http/client.py:1010: in _send_output
    self.send(msg)
/usr/local/lib/python3.8/http/client.py:950: in send
    self.connect()
/usr/local/lib/python3.8/site-packages/docker/transport/unixconn.py:43: in connect
    sock.connect(self.unix_socket)
E   urllib3.exceptions.ProtocolError: ('Connection aborted.',FileNotFoundError(2,'No such file or directory'))

During handling of the above exception,another exception occurred:
/usr/local/lib/python3.8/site-packages/docker/api/client.py:214: in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
/usr/local/lib/python3.8/site-packages/docker/api/daemon.py:181: in version
    return self._result(self._get(url),json=True)
/usr/local/lib/python3.8/site-packages/docker/utils/decorators.py:46: in inner
    return f(self,*args,**kwargs)
/usr/local/lib/python3.8/site-packages/docker/api/client.py:237: in _get
    return self.get(url,**self._set_request_timeout(kwargs))
/usr/local/lib/python3.8/site-packages/requests/sessions.py:555: in get
    return self.request('GET',**kwargs)
/usr/local/lib/python3.8/site-packages/requests/sessions.py:542: in request
    resp = self.send(prep,**send_kwargs)
/usr/local/lib/python3.8/site-packages/requests/sessions.py:655: in send
    r = adapter.send(request,**kwargs)
/usr/local/lib/python3.8/site-packages/requests/adapters.py:498: in send
    raise ConnectionError(err,request=request)
E   requests.exceptions.ConnectionError: ('Connection aborted.',another exception occurred:
tests/test_integration_dummy.py:5: in <module>
    CLIENT = docker.DockerClient(base_url="unix://var/run/docker.sock")
/usr/local/lib/python3.8/site-packages/docker/client.py:45: in __init__
    self.api = apiclient(*args,**kwargs)
/usr/local/lib/python3.8/site-packages/docker/api/client.py:197: in __init__
    self._version = self._retrieve_server_version()
/usr/local/lib/python3.8/site-packages/docker/api/client.py:221: in _retrieve_server_version
    raise DockerException(
E   docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.','No such file or directory'))
=========================== short test summary info ============================
ERROR tests/test_integration_dummy.py - docker.errors.DockerException: Error ...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.75s ===============================
Searching for test report files in directories named [test-results,failsafe-reports,test-reports,surefire-reports] down to a depth of 4
Finished scanning for test reports. Found 0 test report files.
Merged test suites,total number tests is 0,with 0 failures and 0 errors.

所以很明显容器内有 docker 那么为什么无法连接到它。

任何线索将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...