当前位置: 首页 > news >正文

Docker Desktop实战、问题记录

概述

在Windows 10/11安装WSL和Docker Desktop,提到过Docker Desktop的安装,以及Docker Desktop与WSL的关系。

本文重点关注于Windows下Docker Desktop使用过程中遇到的问题。

切换目录

默认情况下,Docker Desktop安装在宝贵的C盘,且没有提供安装配置选项,安装成功后也没有配置入口。如何迁移到其他盘?

操作步骤:

  • 退出Docker Desktop;
  • 移动文件夹C:\Program Files\Docker到其他地方;
  • 创建符号链接:以管理员身份打开命令提示符并执行mklink /D "C:\Program Files\Docker" "D:\Program\Docker"
  • 移动数据目录:mklink /D "C:\Users\johnny\AppData\Local\Docker" "D:\Program\Docker\Data"
    在这里插入图片描述
    出现上述报错,请检查是否已经将源文件夹彻底移动到目标文件夹,并确保源文件夹不再存在。

出现报错:
在这里插入图片描述
请退出WSL子系统。

成功是这样的输出:
在这里插入图片描述

关闭容器组自启动

本地部署好几个应用(容器组)
在这里插入图片描述
启动Docker Desktop时,会自动启动容器组,带来的困扰:

  • Docker Desktop启动非常慢;
  • 占用内存、CPU等资源非常高。

需求:Docker Desktop启动时不自动启动这些容器,只在需要时手动启动。

在Docker Desktop界面里并没找到设置入口,事实上部分容器组会自启动,其他容器组则不会;看来和docker-compose.yml文件有关。

比如coze-studio分组下面的所有容器自动重启,查看本地\coze-studio\docker\docker-compose.yml,果然所有的服务都是restart: always

--restart支持的配置枚举值:

  • no:默认值。容器退出时不会自动重启;
  • on-failure[:max-retries]:只有容器以非 0 状态码退出时才重启。可选设置最大重试次数,如on-failure:3
  • always:无论以何种状态退出,总是重启容器,包括手动docker stop后Docker重启时也会重新启动;
  • unless-stopped:总是重启容器,除非容器被手动停止(docker stopdocker compose down)。即使 Docker 重启,也会自动启动;

直接删除该行配置,或修改为restart: unless-stopped

容器分组

还是上面的截图,可看到在docker目录(分组)下有好几个应用:ragflow、supersonic,这样太混乱;没法在Docker Desktop界面上一键启动、停止、重启。

能不能分组展示,和coze-studio一样?

解决思路:参考coze-studio的docker-compose.yml,在docker-compose.yml文件首行新增name: ragflow

遇到的小问题:
如果已经通过docker compose up -d启动好容器组,此时修改docker-compose.yml新增name: FastGPT,执行docker compose down失败,不能停止容器:
在这里插入图片描述
撤销修改,执行docker compose down,修改docker-compose.yml,再执行docker compose up -d,Docker Desktop效果:
在这里插入图片描述
另外,Docker Desktop会忽略驼峰命名,改为纯小写。

更大的问题:在执行docker compose up -d之前,若没有提前设置好name信息,则修改name无效。因为这个容器组名称信息已写入到Docker Desktop的配置文件里,在本地安装目录一个个配置文件打开并查看并没有找到相关的配置信息,官方文档也没找到相关说明,GPT也是乱答一气。

绕过问题的方法:删除镜像,重新执行docker compose up -d,分组成功的效果:
在这里插入图片描述

镜像分组

抱歉,官方并没有这个功能。比如FastGPT会使用Redis,RAGFlow也要使用Redis。而Redis的分发包不要太多,有官方的Redis(即docker.io/redis),也有其他组织维护的Redis(如bitnami/redis);估计是这个原因,导致Docker Desktop没办法对镜像进行分组维护。

本地git pull更新代码后,执行docker compose up -d,会重新下载最新版镜像文件,导致出现如下问题:
在这里插入图片描述
即本地会有多个不同版本(即标签Tag)的镜像。

只能手动删除不需要的低版本镜像:
在这里插入图片描述
新版本Docker Desktop在持续优化性能,解决Bug,优化界面交互,比如下面不同颜色的镜像:
在这里插入图片描述
然后呢,官方又使用一个超大文件(咋想的??)管理所有的容器和镜像,非常不利于容器和镜像管理。
在这里插入图片描述
并且在手动删除部分低版本镜像后,上述VHDX文件并没有减小,这意味着我本地磁盘迟早会用尽。重启Docker Desktop之后,还是这么大!
在这里插入图片描述
再看看本地磁盘文件:
在这里插入图片描述

再去看看专门用于提交问题(Bug、Issue)的GitHub,多达1.4K!
在这里插入图片描述

VHDX

VHDX,Virtual Hard Disk v2,微软开发的第二代虚拟硬盘文件格式,主要用于虚拟化环境和原生启动场景。最大支持64TB存储容量。通过更新VHDX元数据,可提供电源故障期间的数据保护机制,并优化动态扩展磁盘与差异磁盘的结构对齐方式以适配现代硬件(可在大型扇区磁盘上更好地工作)。VHDX支持在物理硬件上直接启动OS(原生启动),无需依赖虚拟机或Hypervisor。

其文件类型包含固定、动态和差异三种虚拟硬盘,其中差异磁盘支持通过父子结构实现备份快照功能。测试显示固定类型相比动态类型在连续写入性能上具有优势,且动态类型可节省存储空间。该格式还可通过SCSI控制器实现运行时磁盘容量调整,但动态硬盘不建议用于生产环境服务器。

VHDX最初于2012年随Windows Server的Hyper-V组件发布,旨在应对企业级虚拟化存储需求。文件格式规范历经多次修订,最新8.0版于2024年4月发布。早期Windows版本不支持该格式,可通过PowerShell命令实现与VHD格式的转换。

docker compose报错

在这里插入图片描述
智谱chat给出的分析:

正在尝试连接到192.168.99.100:2376,这是一个典型的Docker Machine(使用VirtualBox驱动)配置,而不是Docker Desktop的默认配置。
可能之前安装或使用过Docker Toolbox(包含Docker Machine)

打开控制面板,果然:
在这里插入图片描述
命令docker context ls输出:
在这里插入图片描述
解决方法:

  • 卸载Docker Toolbox
  • 切换到Docker Desktop上下文:docker context use desktop-linux,不管用。

卸载Docker Toolbox,再次执行docker compose up -d,还是有报错:
在这里插入图片描述
GPT分析:

Docker客户端仍在尝试使用Docker Machine的配置文件,需要彻底清理Docker配置,确保它使用Docker Desktop而不是Docker Machine。

解决方法步骤:

  • 删除\.docker\machine目录
  • 检查并清除Docker环境变量,包括:DOCKER_HOST、DOCKER_CERT_PATH、DOCKER_TLS_VERIFY、DOCKER_MACHINE_NAME。

删除环境变量后,重新打开CMD窗口:
在这里插入图片描述
重置Docker Desktop
在这里插入图片描述
在这里插入图片描述
卸载重新安装。

Docker Desktop启动异常

不管是启动普通启动,还是以管理员身份启动,任务管理器里找不到Docker进程。

找到日志:C:\Users\johnn\AppData\Local\Docker\backend.error.json

如果文件非常大,不能直接使用Sublime Text打开,需要截止于tail或cat命令行。

实际上都需要查看日志,检查一下配置文件,大概率是daemon.json文件配置有误,不满足JSON格式。

docker version

输入docker version命令:
在这里插入图片描述
GPT答复Docker Desktop依赖WSL2,WSL异常会导致引擎无法启动。
在这里插入图片描述
重试,一切正常:
在这里插入图片描述
检查WSL发行版:
在这里插入图片描述
切换为docker-desktop
在这里插入图片描述
还是不行。

解决方法:重启Docker Desktop。

如果不行,多试几次;或直接重启Windows电脑。

服务停止异常

点击服务组Stop按钮:
在这里插入图片描述
停止异常,报错信息:
在这里插入图片描述
使用终端命令docker compose down,也是同样的报错:
在这里插入图片描述
原因分析:同上,还是后端引擎异常导致,重启Docker Desktop。

删除容器

在这里插入图片描述

参考

http://www.dtcms.com/a/422463.html

相关文章:

  • 《 Linux 点滴漫谈: 二 》全面掌握 Linux 系统安装与环境准备,迈出学习第一步
  • 从0死磕全栈之Next.js 中的 CSS 方案全解析:Global CSS、CSS Modules、Tailwind CSS 怎么选?
  • 先域名 还是先做网站蜘蛛搜索引擎
  • 《C++进阶之C++11》【可变参数模板 + emplace接口 + 新的类功能】
  • 什么网站可以做兼职怎么做提卡网站
  • 【Linux基础知识系列:第一百四十四篇】使用find命令查找和处理文件
  • cocos 武器攻击敌人后 将碰撞node传给角色脚本 有角色脚本传递计算伤害 调用敌人脚本 敌人自己计算血量 如果超过最大血量 自己删除
  • PySide6 主窗口(QMainWindow)菜单(QMenu)实现打开并读取文本文件
  • Steam秋季特卖倒计时!用UU远程国庆随时购史低游戏!
  • Linux系统C++开发环境搭建工具(一)—— gflags/gtest/spdlog 使用指南
  • MySQL逻辑备份工具mysqldump:原理剖析与实操指南
  • Java-Spring入门指南(十一)代理模式与Spring AOP实战
  • 实名认证接口-识破虚假身份:科技为信任筑起第一道防线
  • 柘林网站建设wordpress改背景图片
  • RokcetMQ事务消息详解
  • Athena + S3 数据分析实战(深度版):从数据湖到可视化 BI
  • IP纯净度检测工具
  • 第四部分:VTK常用类详解(第114章 vtkStreamTracer流线追踪类)
  • MATLAB的CFAR(恒虚警率)图像目标检测
  • 2025三掌柜赠书活动第三十五期 AI辅助React Web应用开发实践:基于React 19和GitHub Copilot
  • HRPC在Polaris存储系统中的应用
  • 网站在百度无法验证码怎么办网站开发技术有包括
  • 【AI时代速通QT】第八节:Visual Studio与Qt-从项目迁移到多版本管理
  • Spring线程池:ThreadPoolExecutor与ThreadPoolTaskExecutor终极对比
  • IDEA创建SpringBoot项目使用JDK1.8
  • 深入分析JAR和WAR包的区别 (指南七)
  • 详解 OpenCV 中的仿射变换:原理与实战案例
  • 计算机视觉(opencv)——基于 dlib 和 CNN卷积神经网络 的人脸检测
  • 黑色背景的网站开发工具微信商城收费吗
  • html快速学习