docker-compose cli为什么会忽略当前已生效的docker context?
docker-compose忽略已生效Docker Context的原因及解决方法
核心原因
大部分情况是你使用了不支持Docker Context功能的旧版Compose V1:
独立发行的docker-compose(带横杠的命令,版本号通常为1.x)是早期独立开发的Compose版本,发布时Docker Context功能还未推出,因此该版本从设计上就不会读取当前生效的Docker Context配置,只会默认连接本地Docker daemon,或者读取DOCKER_HOST环境变量指定的地址。
其他可能原因
- 终端环境中存在
DOCKER_HOST环境变量:该变量的优先级高于Docker Context配置,只要变量存在,不管是Docker原生命令还是Compose都会优先使用变量指向的daemon地址 - 部分特殊封装的Docker版本(比如部分国产Linux发行版预装的修改版Docker)存在配置路径不兼容问题,导致Compose无法读取到Docker CLI的Context配置文件
解决方法
- 优先使用Docker官方集成的Compose V2版本:用
docker compose(不带横杠的子命令)替代旧的docker-compose命令,Compose V2完全兼容Docker Context功能,会自动复用当前CLI切换的Context配置 - 如果必须使用旧版
docker-compose,执行命令时手动指定远程daemon地址即可:DOCKER_HOST=ssh://<远程用户名>@<远程主机地址> docker-compose up -d - 执行
echo $DOCKER_HOST检查是否存在相关环境变量,如果有输出,执行unset DOCKER_HOST清空变量后再执行Compose命令 - 执行
docker compose version可确认是否已安装Compose V2,执行docker-compose --version可查看当前旧版Compose的版本号
内容的提问来源于stack exchange,提问作者A.A
相关产品推荐
相关产品推荐

