更改 Docker 机器位置 - Windows

Posted

技术标签:

【中文标题】更改 Docker 机器位置 - Windows【英文标题】:Change Docker machine location - Windows 【发布时间】:2016-02-29 05:20:54 【问题描述】:

我在 Windows 7 上使用 docker 工具箱来运行 docker。 (码头工人版本 1.9.1)

事实证明,docker 机器在 C:\Users\username\.docker\machine\machines\default 处创建其 VM。当我提交图像时,此位置的 VM 大小会膨胀。由于是 Windows,我负担不起 C 盘上的奢华空间。

有什么方法可以更改默认机器的位置吗?

【问题讨论】:

参考this answer 【参考方案1】:

这对我来说在 Windows 7 上非常有效:

    将 MACHINE_STORAGE_PATH 环境变量设置为您要用于 Docker 机器/VM、缓存等的位置的根目录。 安装 Docker 工具箱 运行 Docker 快速入门终端

Docker Toolbox 现在将在 MACHINE_STORAGE_PATH 指向的位置创建所有文件。

更新:

请注意,使用新存储路径创建新 VM 并不理想,因为 Docker 快速入门终端脚本似乎不适用于未命名为“default”的任何内容。

如果您已经在 C: 驱动器中安装了一个 VM,那么最简单的做法是转到 Oracle VirtualBox 并删除“默认”VM,卸载 Docker Toolbox,删除 C:\Users\.docker\,然后按照上面的3个步骤。

注意:可能不需要卸载和重新安装 Docker Toolbox。但是没有它我还没有测试过。

更新

若还要移动 Docker 证书,请将 DOCKER_CERT_PATH 变量设置为指向新驱动器的路径。感谢@Nutle 的提示。

【讨论】:

我使用的是 Windows 10,这种方式也适用于我 还要注意,docker-machine 假定这是“cache”、“certs”和“machines”目录的父目录。我个人首先假设如果我将 my-home-directory 设置为 MACHINE_STORAGE_PATH,那么 docker-machine 将在下面创建我熟悉的 .docker/machine 目录结构。此情况并非如此。因此,为了获得等效的行为,我必须将 MACHINE_STORAGE_PATH 设置为 my-home-directory\.docker\machine. 值得注意的是,可能需要额外设置证书的环境变量 -- DOCKER_CERT_PATH。就我而言(w7 x64),将其设置为 my_custom_machine_storage_path_link\certs 就足够了。 我通过简单地将整个 .docker 文件夹复制到 D:\DockerEnv 并在不卸载 docker / VM 的情况下适当地更新 MACHINE_STORAGE_PATH 来使用另一个目录更新了我的 docker 和 VM 对于实际启动,我需要更新 default.vbox,配置来自D:\DockerEnv\.docker\machine\machines\default 的.json 也来自USER_HOME.VirtualBox 的VirtualBox.xml 谢谢。我可以确认不需要卸载。只需删除默认 vm docker-machine rm default 并在设置环境变量后创建一个新的。【参考方案2】:

您可以将.docker 目录移动到另一个驱动器并创建一个连接点。

请注意,常规快捷方式不起作用。

例如:

.docker 目录从C:\Users\username 移动到D:\

然后运行:

C:\Users\username>mklink /j .docker D:\.docker
Junction created for .docker <<===>> D:\.docker

【讨论】:

+1 谢谢 - 实际上在我的 Windows 10(启用开发者模式的家庭版)上使用 mklink /D 也有效 - 我在找到这个答案之前尝试过。 优雅的解决方案 同时移动机器存储路径和证书密钥路径是最省力的。并与此路径上的任何其他潜在行为兼容。我对这个答案投了三遍:) 我认为它是最简单的选择,至少是 docker 在带有 WSL 的 windows 上,尝试了像“data-root”这样的配置,但它没有用。【参考方案3】:

自 2015 年以来,现在(2017 年 6 月)Hyper-V,允许您定义您想要的VHDX files:

见Docker for Windows 1.13.0, 2017-01-19 (stable):

可以移动包含图像和非主机安装卷的 VHDX 文件(使用 UI 中的“高级”选项卡)

这将修改%APPDATA%\Docker\settings.json 一行:

"MobyVhdPathOverride":"C:\\Users\\Public\\Documents\\Hyper-V\\New folder\\MobyLinuxVM.vhdx"

见this thread for more。


原答案

目前 2015 年,docker-machine 强制使用%USERPROFILE%: 见libmachine/mcnutils/utils.go#L17-L25

正如issue 499中评论的那样:

与此同时,用户将如何指定.docker/machine/* 文件的存储位置?

您可以通过在命令行中指定--storage-path 或使用环境变量MACHINE_STORAGE_PATH

(你可以看到它在PR 1941中实现)

Joost Den Boer 指出in the comments

刚刚在 Mac 上尝试了“-s &lt;path&gt;”,它似乎工作正常。可能不明显的是路径选项位于命令之前。 运行“docker-machine -s /Volumes/other/location' create --driver=virtualbox”在另一个位置创建了一个新的 VirtualBox 映像。

【讨论】:

@shrivb 尝试设置MACHINE_STORAGE_PATH 环境变量(而不是使用--storage-path 选项),看看是否会有所作为。 在 bash 中,这将是 export MACHINE_STORAGE_PATH=F:\user\DevOps\VM\machine:没有空格,没有引号。但请在常规 CMD 会话中尝试:set MACHINE_STORAGE_PATH=F:\user\DevOps\VM\machine: 再次,没有空格,没有引号。 刚刚在 Mac 上尝试了“-s ”,它似乎工作正常。可能不明显的是路径选项位于命令之前。运行 "docker-machine -s /Volumes/other/location' create --driver=virtualbox" 在另一个位置创建了一个新的 VirtualBox 映像。 在 Windows 上运行时,-s 标志确实按预期在指定路径中创建了新机器。但是,之后docker似乎不知道它,“docker-machine ls”没有列出它,我无法“docker-machine start”它(“主机不存在”错误)。运行 Docker Toolbox 版本 1.9.1i 即时更新:我另外导出了 MACHINE_STORAGE_PATH,现在可以通过“docker-machine ls”看到我的机器。不清楚是否需要原来的 -s 标志。【参考方案4】:

只需使用VirtualBox图形界面重定位文件disk.vmdk

    将文件C:\Users\myUsername\.docker\machine\machines\default\disk.vmdk 复制到另一个文件夹,例如F:\docker-image\。 打开VirtualBox,选择default VM 并打开Settings。 打开Storage,选择当前disk.vmdk并释放(或删除)。 点击Choose Virtual Hard Disk File...并在F:\docker-image\中搜索复制的文件 出现警告:VirtualBox 抱怨旧的 VM UID 然后转到菜单File,选择Virtual Media Manager... 并释放或删除旧的disk.vmdk 重试4.,完成! 如果您的环境需要,也可以为 boot2docker.iso、快照文件夹、视频捕获执行重定位。

【讨论】:

值得一提的是,只有在您的虚拟机未运行时,您才能执行以下步骤。 1) docker-machine.exe 停止默认值 2) 将 virtualbox UI 中的 disk.vmdk 移动到新位置。 (文件/管理磁盘/移动) 3) docker-machine.exe 启动默认 在调试其他解决方案数小时后,我尝试了这个解决方案,并在 5 分钟内让它工作......【参考方案5】:

在运行docker快速启动终端时输入这两个命令。

我想你的新位置是“D:\docker”,你的新机器名是“docker1”

export MACHINE_STORAGE_PATH=D:\\docker

docker-machine create --driver=virtualbox docker1

这应该会在您的新位置创建一个具有指定名称的新机器。

【讨论】:

【参考方案6】:

我无法使 MACHINE_STORAGE_PATH 环境变量方法工作。首次初始化机器时,它一直抱怨缺少证书。仍然在 Windows 7 上,所以必须使用 docker-toolbox。

我通过以下方式解决了这个问题:

    卸载 Docker Toolbox 并重启机器 打开管理员提示符(找到命令提示符,按住 shift,选择“以管理员身份运行”) 从 %USERPROFILE% 中删除 .docker:rmdir /S %USERPROFILE%.docker 在别处创建名为 .docker 的文件夹:mkdir a:\.docker mklink /J %USERPROFILE%.docker a:\.docker 关闭管理员命令提示符 重新安装 Docker 工具箱 使用 Docker 快速入门终端链接引导所有内容。 Kitematic 现在也可以打开了(尽管我必须在第一个错误时选择“使用虚拟盒子”选项。

【讨论】:

【参考方案7】:

我对上述任何解决方案都有点麻烦,但这对我有用:

定义MACHINE_STORAGE_PATH环境变量指向你想要的 目录/文件夹。 像往常一样安装 docker-toolbox,如果这对你有用,那很好,但对我来说,它仍然安装在 .docker 目录中。 为了解决这个问题,我已经停止并从用户目录中删除了与 .docker 文件夹一起创建的默认计算机。 编辑了start.sh 脚本并在顶部添加了一行:

例如

export MACHINE_STORAGE_PATH=D:\\Docker
运行 Docker 快速启动终端快捷方式,它会在所需文件夹中重建默认机器

【讨论】:

【参考方案8】:

此答案适用于使用 Docker Toolbox 的人(Windows 10 Home Build 1909,您可以按照以下步骤安装 docker,然后更改位置。我没有添加任何图像)

安装 Docker Toolkit 和 VM 必须在安装 docker toolkit 后使用 Admin Privileges 安装(*因为 Docker Toolkit 也安装了 VM,但它的版本较低,并且会与其他 iso 文件产生问题,u在这种情况下,也可以取消选中 *)。现在我们必须更改 disk.vmdk 的位置并更新 VM 中的新位置。

从here 安装 Docker Toolbox。按照提供的说明进行操作 立即下载虚拟机​​ v6+ 以管理员身份安装虚拟机(通过右键单击并选择那里) 转到您的VirtualBox.exe不是安装程序)所在的位置并右键单击它(您可以从桌面上创建的快捷方式中找到) 转到属性 --> 兼容性 --> 更改所有用户的设置 --> 选择 run this program as administrator 现在关闭正在运行的 VM 并运行 Kitematic,如果它失败(它可能会)然后选择提供的与 VM 相关的选项(只有 2 个选项) 这次可以了,现在关闭它

更改下载图片的位置

打开你的虚拟机并关闭一个新运行的镜像default(右键->关闭-->关机) 复制粘贴你的disk.vmdk文件(对我来说它位于C:\Users\Dell\.docker\machine\machines\default\disk.vmdk)到你想存储你下载的图像的地方(基本上disk.vmdk是你使用docker时大小会增长的地方) 现在我们还需要告诉虚拟机这一变化 右键单击default 图像并转到设置 选择存储 通过右键单击删除disk.vmdk 附件 --> 删除(这是旧路径绑定的 disk.vmdk) 点击file --> virtual media manager 并从这里删除disk.vmdk(现在VM不知道这样的disk.vmdk东西是否存在) 右键单击default 图像--> 存储--> add hard disk(此选项就在该iso 图像上方) 现在选择您粘贴在某处的disk.vmdk 现在运行你的 docker cli 然后运行这个命令docker run hello-world 如果没有错误,那么一切都完成了 您可以通过检查这两个 vmdk 磁盘的大小然后拉取一些新映像来验证大小

我从安装开始就写了一个描述性很强的答案,因为我确实遇到了一些问题,所以想让其他人非常直接。 如果您愿意,可以从 C 盘中删除您的 disk.vmdk 磁盘(较旧的磁盘)

【讨论】:

【参考方案9】:

创建名为 c:\programdata\docker\config\daemon.json 的文件,其内容如下,其中 e:\images 是您要存储所有图像等的位置。重新启动 docker。

“图形”:“e:\\图像”

这很有魅力

参考 - https://forums.docker.com/t/where-are-images-stored/9794/11

【讨论】:

【参考方案10】:

截至最新版本,这些答案已过时。该位置可在“设置”用户界面中配置。

https://github.com/docker/for-win/issues/333

【讨论】:

请注意,某些操作系统不支持 Docker Desktop for Windows,包括 Windows 10 Home。所以这些答案仍然有用。 没有 Hyper-v 的 Windows(我可以命名为 Windows 7 和 Windows 10 Home)仍然可以使用这些答案。【参考方案11】:

我发现很多这些答案都没有数据,至少它们在我的环境中不起作用:win10 PRO,docker desktop community 2.0.0.3。最后,我通过这种方法解决了这个问题:

    卸载 docker

    打开 Hyper-V 管理器(按 WIN 键,然后输入“Hyper”)

    Hyper-V 设置(不在 VM 设置上)更改默认的虚拟硬盘位置并确认

    安装 docker

    在 docker 设置的高级选项中检查磁盘映像位置

【讨论】:

在 Windows 10 Pro 上,docker desktop 和 docker toolbox 默认使用 hyper-v 作为 VM 驱动程序。这些答案中的大多数是针对带有 VirutalBox 驱动程序的 docker 工具箱,在没有 hyper-v 的 Windows 上。【参考方案12】:

我使用 Windows 10 和 Docker 桌面(社区)版本 2.0.0.0,我想将 vhdx 文件移动到另一个驱动器。

在 Docker 桌面上单击鼠标右键 -> 设置 然后 Docker 桌面 UI 将打开转到 Advance -> Disk image location 只需将路径更改为新目的地,整个过程对我来说既顺畅又快速 - 它会自动将 vhdx 文件从原始路径复制到新路径重新启动 docker 并按预期工作

【讨论】:

【参考方案13】:

对于 Windows 7:

复制粘贴您的 disk.vmdk 文件(对我来说它位于 C:\Users\name.docker\machine\machines\default\disk.vmdk)到您要存储下载的图像的位置(基本上disk.vmdk 是使用 docker 时会增大的文件)

在 Virtualbox 中右键单击默认图像并转到设置 通过右键单击选择存储删除disk.vmdk附件-->删除

单击文件 --> 虚拟媒体管理器并从此处删除 disk.vmdk

右键默认镜像-->存储-->添加硬盘(这个选项就在那个iso镜像的上面)现在选择你粘贴到某个地方的disk.vmdk

现在在 config.json 中更改此路径 (C:\Users\name.docker\machine\machines\default\config.json) 用你放置硬盘位置的新路径更改存储路径(“StorePath”:“F:\docker-image”)

保存。

【讨论】:

以上是关于更改 Docker 机器位置 - Windows的主要内容,如果未能解决你的问题,请参考以下文章

更改docker默认网段

更改Docker默认的images存储位置

在 Windows 10 Pro 上更改 Docker 本机映像位置

最新版docker安装,更改docker安装位置,镜像数据保存路径,配置镜像加速器

如何更改“docker create volume”命令的默认位置?

在 Windows 10 Home 上使用 WSL2 上的 Docker Desktop 时,如何更改 docker 映像的位置?