什么是Windows 10上的docker镜像位置

Pur*_*aik 26 docker docker-compose docker-for-windows

我有Windows 10 Home操作系统.我已经安装了Docker工具箱.

我使用以下命令创建了.net核心应用程序的docker镜像.

$  docker build -t helloWorld:core .
Run Code Online (Sandbox Code Playgroud)

现在我想将此图像发送到其他机器.但我没有得到图像文件.

有人可以告诉我,我的图像会保存在哪里吗?或者有什么办法,在docker build命令中指定docker image path.

nev*_*ves 53

答案确实令人困惑,因为在 Windows 中运行 Docker 的方法不止一种。最新的方式是使用 Windows 10 Home 2020 年 5 月更新。它将使用适用于 Linux 的新版 Windows 子系统 (WSL2)。这个答案是关于这个配置的。

激活WSL2,您将安装泊坞桌面。Docker Desktop 是一个客户端,它将连接到 WSL 内的主机。

图像目录有些不一致。如果您docker info在主机或 WSL 中运行,它将为您提供Docker Root Dir: /var/lib/docker不存在的路径:

$ ls /var/lib/docker
ls: cannot access '/var/lib/docker': No such file or directory
Run Code Online (Sandbox Code Playgroud)

你会在图片中找到

/mnt/wsl/docker-desktop-data/
Run Code Online (Sandbox Code Playgroud)

或在此 Windows 资源管理器路径中:

\\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data\docker\image
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Windows 10 非家庭版,它的工作方式可能会有所不同。看看其他答案。由于我无法访问此操作系统,因此我不会尝试回答。

  • 现在路径 \\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data\ 对我来说是空的,尽管 `docker info` 说我有 4 个图像。 (6认同)
  • @AlexandrZarubkin我的情况下正确的路径是: `\\wsl$\docker-desktop-data\version-pack-data\community\docker\image` 和/或 `\\wsl$\docker-desktop-data\version -pack-data\community\docker\overlay2` (取决于您要查找的内容) (4认同)
  • 我认为这是 WSL2 的唯一正确答案。当然在我的系统上。 (2认同)

use*_*075 44

所有的答案对我来说已经过时或不正确,我在 %AppData%\..\Local\Docker\wsl

  • 天哪,整个互联网上都有人在搜索 docker 镜像文件在哪里。Docker 创建者的设计和支持是多么可悲啊。最后我在这里找到了正确的答案。非常感谢。 (22认同)
  • 这应该被接受的答案。ext4.vhdx 文件位于:%AppData%\Local\Docker\wsl\data (7认同)
  • 我不明白。我期望 docker 文件或 json 或 yml 文件之类的文件。如何更改数据库连接等配置值? (4认同)
  • %AppData%\Local\... 不存在 在 %LocalAppData%\Docker\wsl 上找到它 (3认同)

Ali*_*ahi 39

如果您在 Windows Subsystem for Linux (WSL2) 上使用 docker,则可以通过隐藏共享访问映像:

\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2

这些卷也位于:

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

docker版本是20.10.7

在此输入图像描述

如果你想更深入,它docker-desktop-data实际上位于你的一个文件中(虚拟机AppData\Local磁盘vhdxC:\Users\YOUR_USER_NAME\AppData\Local\Docker\wsl\data\ext4.vhdx

您可以终止 docker 进程并打开ext4.vhdx文件(例如使用 7zip),您可以version-pack-data\community\docker在该文件中看到。

  • 就我而言,我在这里找到了卷:\\wsl$\docker-desktop-data\data\docker\volumes (2认同)

Joh*_*ohn 31

在Windows 10上,右键单击系统托盘(任务栏右侧)中的泊坞窗图标,然后选择设置...在高级窗格中,您将看到如下内容:

在此输入图像描述

  • 如今,最新版本中似乎没有高级选项卡. (4认同)
  • 对于 v19.03.8,请检查选项卡 **Docker Engine** (2认同)

evg*_*nyl 19

  1. 通过使用该docker info命令.
  2. 在结果中 - 检查Docker Root Dir

此文件夹将包含图像,容器,......

在此输入图像描述

  • 我的根目录是 /var/lib/docker。我可以通过资源管理器导航到该文件夹​​吗? (13认同)
  • 在我的Windows 10机器上,我得到了这个路径"Docker Root Dir:/ mnt/sda1/var/lib/docker",这在我的机器上不存在. (11认同)
  • 如果在Windows 10计算机上有Linux容器,则容器存储在MobyLinuxVM.vhdx文件中.您无法安装或浏览该文件AFAIK,但您仍然可以使用此"蓝色药丸"技巧在该机器内列出容器https://blog.jongallant.com/2017/11/ssh-into-docker-vm- windows /默认容器存储在该虚拟机的linux路径/ var/lib/docker中(你可以从`docker info`命令确认linux路径) (11认同)
  • 为什么不能获得有关码头工人的好信息?这太令人沮丧了!和上面的人一样,我在Windows 10机器上运行linux容器,我无法弄清楚docker存储容器的神奇位置. (4认同)
  • 你在运行 Docker 还是 Docker Toolbox?通过日志,您似乎正在运行 Docker-Toolbox,它为 docker-machine 运行 linux VM。在这种情况下 - 连接到 docker-machine,然后转到这个指定的文件夹 (2认同)

Viv*_*Dev 16

如果您使用的是 Windows 10 并运行 Windows 容器

运行 Windows 容器的 docker

在上图中,docker 正在运行 Windows 容器。所以它显示切换到linux容器。

首次运行docker info命令(更具体docker info --format “{{json .DockerRootDir}}”)。

你应该看到根目录为

Docker 根目录:C:\ProgramData\Docker

现在运行一个命令来拉一个像

docker pull hello-world
Run Code Online (Sandbox Code Playgroud)

拉取图像后,您可以查看 docker 根目录。

注意当前修改的日期时间。在其中一个文件夹中,您可以看到图层的 sha。

Windows 上的 Docker 位置

最后,如果您想知道图像的下载位置,还必须查看以下文件夹。上下两个文件夹是

  • C:\ProgramData\Docker\image\windowsfilter
  • C:\ProgramData\Docker\windowsfilter

码头位置

现在用于 linux 图像。

如果您的 docker 正在运行 Windows 容器,然后如果您尝试获取基于 linux 的容器,例如 nginx,则如下所示

docker pull nginx:latest
Run Code Online (Sandbox Code Playgroud)

您将收到如下消息。

latest: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.18363 in the manifest list entries
Run Code Online (Sandbox Code Playgroud)

所以切换到linux contaners。看到第一张图。

一旦 docker for linux 运行,再次运行该命令。

docker pull nginx:latest
Run Code Online (Sandbox Code Playgroud)

您可以看到图像正在下载。

现在这张图片下载到你的硬盘上了吗?在这种情况下,docker info 命令可能没有多大帮助。

所以重新开始。单击设置而不是“切换到 Windows 容器...”

Docker 桌面上的 Linux 容器设置

现在看到路径。

docker 桌面上的设置页面显示路径

在我的机器上是 C:\ProgramData\DockerDesktop\vm-data

LinuxImages 位置

注意日期修改列。请注意并观察在您拉取或删除基于 linux 的映像后。

这是为 linux env 保留的磁盘空间,因此您将无法进一步向下浏览以查看图像所在的位置。

但是如果必须的话,启动一个基于 Linux 的虚拟机,安装 docker 并探索路径 /var/lib/docker/

有时您可能会遇到权限问题。如果是这样,请看这个这个


Gau*_*vKP 15

在最近使用 WSL 的 Docker Desktop 中,Windows 10 中的 docker 映像位置已更改 -

(last tested with Docker Desktop Community version 2.3.0.3)

首先使用 Run - 并输入\\wsl$

这将打开文件资源管理器,并显示文件夹,如下所示 -

  1. docker-desktop
  2. docker-desktop-data

浏览目录以查看所需的文件。

注意\\wsl$:使用命令之前请确保 docker 桌面正在运行

在此输入图像描述


Atu*_*tul 10

截至 2022 年 8 月 29 日:

这里:

%localappdata%\Docker\wsl
Run Code Online (Sandbox Code Playgroud)

和这里:

C:\ProgramData\DockerDesktop\vm-data
Run Code Online (Sandbox Code Playgroud)

在过去,它在这里:

C:\Users\Public\Documents\Hyper-V\Virtual hard disks
Run Code Online (Sandbox Code Playgroud)

所以是的。程序数据、应用程序数据、文档等,它们可以存储在磁盘上的任何位置。Docker 是完全无组织的产品。浪费开发人员大量的时间来解决一些小事情。


Mul*_*008 7

我的可以在"C:\ Users\Public\Documents\Hyper-V\Virtual hard disks"中找到


小智 6

您可以使用以下命令导出您的图像,并可以将其复制到 linux/另一台机器 docker export [OPTIONS] CONTAINER

例子:

docker export --output="latest.tar" red_panda
Run Code Online (Sandbox Code Playgroud)


Jav*_*tes 5

当你的Windows集装箱激活之后,你的图像默认保存在C:\ProgramData\Docker\

要更改此设置,您可以编辑C:\ProgramData\Docker\config\daemon.json"graph"使用新路径添加新键...(请注意,每个反斜杠都会被另一个反斜杠转义)

例:

{
  "registry-mirrors": [],
  "insecure-registries": [],
  "debug": true,
  "experimental": false,
  "graph": "D:\\ProgramData\\Docker"
}
Run Code Online (Sandbox Code Playgroud)

之后,您需要重新启动Docker服务,然后可以使用docker info命令验证更改并查看Docker Root Dir条目。

  • 哈维尔是对的。仅当 docker 使用 Linux 容器时,您才能获得高级选项。我还相信我们使用“数据根”来提供图像位置 (3认同)

Ted*_*Ted 5

Windows 10 的 docker 桌面已移至此处:

c:/users/ <user>/AppData/Roaming/Docker/settings.json


use*_*316 5

将此图像发送到另一台机器:

docker ps -a  
#or docker container ls -a
docker commit <container-id> mynewimage
#start here if you never started your image 
#(ex: if just created using docker build -t helloWorld:core .)
docker image ls
docker save mynewimage > /tmp/mynewimage.tar
Run Code Online (Sandbox Code Playgroud)

在另一台机器上:

docker load < /tmp/mynewimage.tar
docker images
Run Code Online (Sandbox Code Playgroud)

正如上面的评论中所解释的,在使用 linux 容器的 Windows 上工作时,容器驻留在位于 DockerDesktop/settings/advanced/DiskImageLocation 的 docker 磁盘映像中

这里


Mar*_*rey 5

我找不到基于 WSL 的 Docker 安装的位置。但是 docker 命令本身有一种简单的方法来获取图像!

docker image save myimagename -o myimagename.img
Run Code Online (Sandbox Code Playgroud)

这会直接为您创建一个图像文件。