使用pytest-docker-compose插件时Docker API版本获取失败问题
问题:pytest-docker-compose:3.2.1 插件重启系统后无法连接Docker守护进程
错误详情
运行pytest测试时触发以下错误:
def _retrieve_server_version(self): try: return self.version(api_version=False)["ApiVersion"] except KeyError: raise DockerException( 'Invalid response from docker daemon: key "ApiVersion"' ' is missing.' ) except Exception as e: INFO 2022-11-17 19:24:43,005 Done running pytest tests [tests_runner.py:run_pytest:79] ERROR 2022-11-17 19:24:43,013 pytest exited with a nonzero exit code: 1 [tests_runner.py:run_pytest:83] INFO 2022-11-17 19:24:43,020 Removing the test sidecar [live_cp_test.py:remove_sidecar:68] WARNING 2022-11-17 19:24:45,752 Skipping 'prepare_artifacts', requires cloudbuild [live_cp_test.py:prepare_artifacts:74] WARNING 2022-11-17 19:24:45,756 Skipping 'prepare_and_send_slack_update' (Requires cloudbuild) [live_cp_test.py:prepare_and_send_slack_update:97] > raise DockerException( f'Error while fetching server API version: {e}' ) E docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
环境信息
- 操作系统:MacOS Monterey 12.6
- Docker版本:
Client: Cloud integration: v1.0.29 Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:18 2022 OS/Arch: darwin/amd64 Context: desktop-linux Experimental: true Server: Docker Desktop 4.14.1 (91661) Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 18:00:19 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
- docker-compose版本:
Docker Compose version v2.12.2
- 运行命令:
docker run --env-file ./env.list -v /var/run/docker.sock:/var/run/docker.sock -v /Users/f/.config/gcloud:/root/.config/gcloud -v /Users/f/.docker:/root/.docker -v /Users/f/work/tests:/Users/f/work/tests --net=host -ti --rm test_image /Users/f/work/tests/run_in_docker bash -c '2>&1 make install && poetry run e2e live-cp-test --tests-path tests'
问题特征
Docker刚安装完成时可正常运行,系统重启后每次使用该pytest插件都会触发上述错误。
解决方案
1. 确保Docker Desktop自动启动并运行
系统重启后Docker Desktop可能未自动启动,导致/var/run/docker.sock无法访问:
- 打开Docker Desktop偏好设置 → 通用 → 勾选"Open Docker Desktop when you log in"
- 手动启动Docker Desktop,等待守护进程完全就绪后再执行测试命令
2. 检查Docker Socket的权限与挂载有效性
- 本地验证:执行
ls -l /var/run/docker.sock,若文件不存在,说明Docker守护进程未启动 - 容器权限:在运行命令中添加
--user root,确保容器内用户拥有访问挂载sock文件的权限
3. 重置Docker上下文
系统重启后Docker上下文可能出现异常,执行以下操作:
- 运行
docker context use desktop-linux(与当前上下文保持一致) - 重启Docker Desktop,确保上下文正常加载
4. 验证容器内Docker客户端兼容性
容器内Docker客户端版本需与宿主机守护进程API版本匹配:
- 在容器内执行
docker version,查看客户端版本,若差异过大,更新容器内Docker客户端至兼容版本
内容的提问来源于stack exchange,提问作者MR.i
相关产品推荐
相关产品推荐

