Docker Compose构建报错:不支持http+docker URL协议
问题背景
使用.NET Core项目,依赖docker-compose V1(6.1.3版本),Docker版本25.0.3,执行docker-compose build时触发以下错误:
urllib3.exceptions.URLSchemeUnknown: Not supported URL scheme http+docker
During handling of the above exception, another exception occurred:
docker.errors.DockerException: Error while fetching server API version: Not supported URL scheme http+docker
解决方案
这个错误源于docker-compose V1的依赖库(urllib3)不支持新版本Docker使用的http+docker URL协议,可通过以下步骤修复:
检查并修正DOCKER_HOST环境变量
- 查看当前DOCKER_HOST值:
- Linux/macOS:
echo $DOCKER_HOST - Windows(CMD):
echo %DOCKER_HOST%
- Linux/macOS:
- 如果输出包含
http+docker://前缀,将其替换为对应系统的正确协议:- Linux/macOS:设置为
unix:///var/run/docker.sock,执行export DOCKER_HOST=unix:///var/run/docker.sock - Windows:设置为
npipe:////./pipe/docker_engine,执行set DOCKER_HOST=npipe:////./pipe/docker_engine
- Linux/macOS:设置为
- 也可直接取消该变量设置:
- Linux/macOS:
unset DOCKER_HOST - Windows:
set DOCKER_HOST=
- Linux/macOS:
- 查看当前DOCKER_HOST值:
临时指定连接协议执行构建
不想修改环境变量的话,可在构建命令前临时指定DOCKER_HOST:- Linux/macOS:
DOCKER_HOST=unix:///var/run/docker.sock docker-compose build - Windows(CMD):
set DOCKER_HOST=npipe:////./pipe/docker_engine && docker-compose build
- Linux/macOS:
升级docker-compose依赖的urllib3版本
docker-compose V1基于Python开发,旧版urllib3不支持http+docker协议,手动升级依赖:- 如果docker-compose是通过pip安装:
pip install --upgrade urllib3 - 如果是通过pipx安装:
pipx inject docker-compose urllib3 --upgrade
- 如果docker-compose是通过pip安装:
备选方案:迁移到Docker Compose V2
Docker官方已停止对Compose V1的维护,V2(docker compose命令,无横杠)与Docker 25.x兼容性更好,无需依赖老旧Python库。若项目允许,迁移到V2可彻底避免此类兼容性问题。
内容的提问来源于stack exchange,提问作者Kalaivani

