Windows 10 将 Docker Desktop for Windows(WSL 2 方式)文件存储移出系统盘放置到其它目录

本文主要是介绍Windows 10 将 Docker Desktop for Windows(WSL 2 方式)文件存储移出系统盘放置到其它目录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

以WSL2方式使用Docker Desktop for Windows确实带来了更好的体验,但同时也带来新的问题。其中最典型的问题就是系统盘空间的占用越来越大。而且还有典型的内存问题。

最初没有注意,也是因为没有找到最根本的解决办法,采用下面的配置粗略的应付了一下:

1 [wsl2]
2 memory=10GB
3 swapFile=D:\\LocalCaches\\wsl2\\swap.vhdx
4 localhostForwarding=true

注:在当前系统的用户下,新建.wlsconfig文件,在其中配置以上代码。

实际上本质问题没有解决。有一个码友来询问这个问题,才认认真真的考虑如何解决。

说明:

默认情况下,Docker Desktop for Window会创建如下两个发行版(distro):

  • docker-desktop:用于存放程序
  • docker-desktop-data:用于存放镜像

如果访问%LOCALAPPDATA%/Docker/wsl目录,就可以看到两个文件夹,同时每个文件夹中都会有一个vhdx文件。

%LOCALAPPDATA%/Docker/wsl就是当前登录用户的AppData\Local目录,假设当前登录的用户为Administrator,那么这个目录就是C:\User\Administrator\AppData\Local\Docker\wsl

  • data/ext4.vhdx 是被docker-desktop-data 发行版使用
  • distro/ext4.vhdx 是被 docker-desktop 发行版使用

docker-desktop-data 是被用来存储docker images 以及相关的数据。因此,它的大小会随着使用逐步增长,因此导致系统盘空间不足。

vhdx文件最大支持256G,超出这个大小将会出错。参见:官方说明

解决步骤

1、删除所有容器

可以使用命令,查看所有容器:

1 docker ps -a

其中-a参数指代当前没有在运行的容器,如果不写-a则表示所有正在运行的容器。

如果需要在cmd窗口内以命令行的方式删除已部署容器,则可参考如下命令:

1 docker rm 容器id

补充说明:如果需要在cmd窗口内以命令行的方式查看和删除已下载镜像,则可参考如下命令:

查看镜像列表:

1 docker images

删除指定镜像:

1 docker rmi 镜像id

除以上以命令行处理的方法外,还可采用docker为windows 提供的desktop界面处理:

打开Docker Desktop for Window 的Dashboard界面,将该界面中的所有内容删除。

这一步很重要,如果不这样操作,进行后续操作的时候,要么提示网络相关错误:cannot create a specific network,要么导入完成之后,vhdx文件会消失。

2、退出Docker Desktop

3、在控制台中,使用下面命令,关闭所有发行版

wsl --shutdown

4、检查是否所有发行版都已经关闭。

wsl --list --verbose

命令可以查看到,实例效果如下:

1 D:\work>wsl --list --verbose
2 NAME                   STATE           VERSION
3 docker-desktop         Stopped         2
4 Ubuntu-18.04           Stopped         2
5 docker-desktop-data    Stopped         2
6 D:\work>

5、备份已有image数据

通过下面命令,将已有的image数据,以tar格式备份已有数据到指定目录。目录根据自己实际情况指定。

wsl --export docker-desktop-data E:\docker-desktop\docker-desktop-data.tar

docker-desktop-data名字,就是上一步中,列举出来的Docker Desktop存储image的发行版

6、注销当前的docker-desktop-data发行版

1 wsl --unregister docker-desktop-data

该命令执行完成之后,再次使用wsl --list --verbose命令查看,docker-desktop-data就已经不在了。

7、重新导入备份的docker-desktop-data

1 wsl --import docker-desktop-data E:\docker-desktop\data E:\docker-desktop\docker-desktop-data.tar --version 2
  • docker-desktop-data Docker Desktop存储image的发行版
  • 第二个路径,即指定vhdx新的放置目录。指定到目录级别即可,不用指定vhdx名。
  • 第三个路径,指定第5步中备份的数据。

8、重新运行Docker Desktop

Docker Desktop 运行成功之后,查看新目录中的vhdx的修改时间,如果修改时间是最新时间,就说明配置成功。

备注

转载内容中选择仅将存放镜像的docker-desktop-data进行了转储。

我个人的实际选择是将docker-desktop-data和docker-desktop这两个都进行了转储,分别存储在自定义的 盘符:/docker/data 和 盘符:docker/desktop 文件路径下,方便统一管理。

参考资料:

(1):https://dev.to/kimcuonthenet/move-docker-desktop-data-distro-out-of-system-drive-4cg2
(2):https://blog.csdn.net/qq_26709459/article/details/80785761
(3):https://docs.microsoft.com/en-us/windows/wsl/compare-versions#understanding-wsl-2-uses-a-vhd-and-what-to-do-if-you-reach-its-max-size

这篇关于Windows 10 将 Docker Desktop for Windows(WSL 2 方式)文件存储移出系统盘放置到其它目录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253209

相关文章

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho