

WSL2 迁移 Docker 镜像存储位置
source link: https://exp-blog.com/container/wsl2-qian-yi-docker-cun-chu-wei-zhi/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

自从 Win 10 推出 WSL2 之后,Docker Desktop 就默认使用 WSL2 运行了,此时通过 Hyper-V 无法再设置 Docker 镜像的存储位置,而且 Docker Desktop 的镜像位置设置项也不见了。
这就带来一个问题,由于 Docker 镜像默认是存储在 C 盘的 %LOCALAPPDATA%/Docker/wsl
目录,C 盘空间会越来越小,这对于 C 盘只作为系统盘的同学而言就十分不友好了,尤其是现在不少同学的 C 盘都是固态盘。
WSL 是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生虚拟机开销。WSL2 作为新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件,它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
为了解决此问题,就需要想办法把 Docker 镜像迁移到其他盘符。
查看 Docker 官网说明,发现原来启用 WSL 后,Docker 运行数据都在 WSL 发行版中,因此镜像存储位置只能由 WSL 管理。
安装 Docker 后,Docker 会自动创建 2 个发行版:
- docker-desktop: 存储在
%LOCALAPPDATA%\Docker\wsl\distro
- docker-desktop-data: 存储在
%LOCALAPPDATA%\Docker\wsl\data
(占用空间的元凶)
在 WSL1 时代,几乎都是使用第三方工具 LxRunOffline 进行迁移,但是这个工具到了 WSL2 时代就不能用了:实践证明,LxRunOffline 确实可以迁移自己安装的发行版,却迁移不了 Docker 自动创建的 2 个发行版。
其实用 WSL 命令就可以简单实现迁移,操作步骤如下:
- 停止 Docker 进程
- 关闭所有发行版:
wsl --shutdown
- 导出 docker-desktop-data 发行版:
wsl --export docker-desktop-data D:\wsl\docker\tmp\docker-desktop-data.tar
- 注销 docker-desktop-data 发行版:
wsl --unregister docker-desktop-data
- 导入 docker-desktop-data 到期望迁移的目录:
wsl --import docker-desktop-data D:\wsl\docker\data\ D:\wsl\docker\tmp\docker-desktop-data.tar --version 2
(迁移目录D:\wsl\docker\data\
可根据个人需求修改) - (可选)删除第 3 步导出的临时文件:
D:\wsl\docker\tmp\docker-desktop-data.tar
- (可选)另一个 Docker 发行版 docker-desktop 可使用同样方式迁移,但是其占用空间很小,不迁移亦可
迁移完成后可发现
%LOCALAPPDATA%/Docker/wsl
目录下的发行版文件已被删除, C 盘空间已释放
PowerShell 一键迁移脚本
# wsl2_move_docker_image.ps1
# Docker 镜像存储位置一键迁移脚本(适用于 WSL2 版本)
#
# Powershell Script 3.0+
# ---------------------------------------------------------------------------------------
# 脚本使用方式(需使用管理员权限执行):
# .\wsl2_move_docker_image.ps1 -target "D:\wsl\docker"
# ---------------------------------------------------------------------------------------
#
# target: 期望迁移的目录
param([string]$target="D:\wsl\docker")
Write-Host "Stop docker ..."
net stop "com.docker.service"
Write-Host "Stop wsl ..."
wsl --shutdown
Write-Host "Move docker-desktop-data image ..."
wsl --export docker-desktop-data $target\tmp\docker-desktop-data.tar
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data $target\data\ $target\tmp\docker-desktop-data.tar --version 2
Remove-Item $target\tmp\docker-desktop-data.tar -recurse
Write-Host "Move docker-desktop image ..."
wsl --export docker-desktop $target\tmp\docker-desktop.tar
wsl --unregister docker-desktop
wsl --import docker-desktop $target\distro\ $target\tmp\docker-desktop.tar --version 2
Remove-Item $target\tmp\docker-desktop.tar -recurse
Write-Host "Finish."
小知识:WSL 如何访问宿主机服务?
- WSL1 与宿主机在同一网络下,直接访问
127.0.0.1
即可 - WSL2 因虚拟技术的差异,与宿主机不在同一网络下,且每次重启时宿主机 IP 均会变化,故只能通过
cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
命令获取宿主机 IP
Recommend
-
69
近几年 Docker 风靡技术圈,不少从业人员都或多或少使用过,也了解如何通过 Dockerfile 构建镜像,从远程镜像仓库拉取自己所需镜像,推送构建好的镜像至远程仓库,根据镜像运行容器等。这个过程十分简单,只需执...
-
15
Re-Use SSH Config Inside Docker Containers with WSL2 – avdi.codes
-
5
从零实操基于WSL2 Docker部署Asp.Net Core项目 平日在公司里都是基于阿里Teambitio...
-
9
有没有那种一键迁移系统缓存位置的软件 - V2EX V2EX › Windows 有没有那种一键迁移系统缓存位置的软件
-
6
微软于今日(2021年10月05日)发布了正式版win11。访问Windows 11 安装助手即可下载安装。下载和前期安装过程不会影响系统正常使用,最后的重启安装的过程大概耗时20分钟,和普通更...
-
7
本篇的内容主要是关于docker镜像的。在我们安装好docker之后,要想使用它,第 一步就是要下载一些镜像。本文将依据此流程分析docker中镜像的拉取、存储等相关内容。 docker中几乎所有的操作都是通...
-
9
系统环境介绍Win 10 2004WSL2(Ubuntu 20.04)Docker 19.03.13 启用 Linux 子系统打开 控制面板 -> 程序 -> 启用或关闭Windows功能。找到适用于Linux的Windows子系统和...
-
4
How to install Docker Desktop on Windows 10 Home edition and WSL2 Requirements Windows 10 64-bit Home, Build 15063 or later. Hyper-V and Containers Windows features must be enabled. BIOS-level hardware vir...
-
5
Activate wsl2 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --set-default-version...
-
7
如何更改Docker的默认存储位置 作者:微技术 2023-12-11 22:17:56 云计算 如果在安装系统时选择了自动分区,根分区一般不会分太大,CentOS...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK