Docker镜像存储在主机上的哪个位置?

nem*_*emo 797 docker docker-image

我设法找到目录下的容器/var/lib/docker/containers,但我找不到图像.

目录和文件是/var/lib/docker什么?

Air*_*Air 593

/var/lib/docker目录的内容取决于Docker用于存储驱动程序.

默认情况下,这将是aufs,但可以回落到overlay,overlay2,btrfs,devicemapper或者zfs根据您的内核支持.在大多数地方,这将是aufs的Redhat与去devicemapper.

您可以使用Docker守护程序-s--storage-driver=选项手动设置存储驱动程序.

  • /var/lib/docker/{driver-name} 将包含图像内容的驱动程序特定存储.
  • /var/lib/docker/graph/<id>现在只包含jsonlayersize文件中有关图像的元数据.

在以下情况下aufs:

  • /var/lib/docker/aufs/diff/<id> 具有图像的文件内容.
  • /var/lib/docker/repositories-aufs是包含本地图像信息的JSON文件.可以使用该命令查看docker images.

在以下情况下devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data 存储图像
  • /var/lib/docker/devicemapper/devicemapper/metadata 元数据
  • 请注意,这些文件是精简配置的"稀疏"文件,因此不像它们看起来那么大.

  • 帮自己一个忙,不要"检查默认值".使用`docker info`并找到特定于您的设置**的实际位置**. (72认同)
  • 对于MacOS,[见下面的答案](http://stackoverflow.com/a/37642236/1618202) (7认同)
  • 这似乎已经改变。我正在使用Docker for Mac和2个1.5 GB的映像,而/ var / lib没有目录docker。 (4认同)
  • 我可以通过某种方式安装来看到里面的内容吗? (2认同)

mir*_*val 286

使用Docker for Mac Application时,似乎容器存储在位于以下位置的VM中:

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Run Code Online (Sandbox Code Playgroud)

更新(由mmorin提供):

截至2019年1月15日,似乎只有这个文件:

~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw
Run Code Online (Sandbox Code Playgroud)

包含Docker磁盘及其中的所有图像和容器.

  • 这是所有图像的位置(如`ubuntu`,`nginx`),还是所有容器的位置?原始问题要求**图像**,而不是**容器**...... (7认同)
  • 这似乎已经改变了.我使用的是"Docker for Mac",其中两个图像各1.5 GB,而`〜/ Library/Containers/Data/com.docker.docker/Data`没有目录`com.docker.driver.amd64-linux`和唯一大文件在`vms/0/Docker.raw`中有3.6 GB. (3认同)
  • 如果您记住Docker仍在VM中运行,则系统路径是相对于VM的,而不是来自Mac Osx系统的路径。试试这个命令:docker run --rm -it -v /:/ vm-root alpine:edge ls -l / vm-root nad之后:docker run --rm -it -v /:/ vm-root alpine: edge ls -l / vm-root / var / lib / docker您可以从WM主机列出docker文件夹 (2认同)
  • 使用 qcow2 还是 raw 取决于您是否使用具有 APFS 或更低版本的 MacOS High Sierra:https://docs.docker.com/docker-for-mac/faqs/#disk-usage (2认同)

Phi*_* L. 122

在Mac OS X或Windows的特殊情况下,使用boot2docker,您的Docker镜像存储在由boot2docker管理的VirtualBox VM中.

此VM将存储在VirtualBox映像的正常位置:

      OS X: ~/VirtualBox VMs/boot2docker-vm

      视窗: %USERPROFILE%/VirtualBox VMs/boot2docker-vm

您可以通过运行来重置它(警告:这将破坏您到目前为止构建和下载的所有图像):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up
Run Code Online (Sandbox Code Playgroud)

如果你在没有有用的-rm选项的情况下构建/调试构建时保留了大量的中间图像,这个特别有用,我在这里引用它们作为参考:使用:

docker build -t webapp --rm=true --force-rm=true .
Run Code Online (Sandbox Code Playgroud)

代替:

docker build -t webapp .
Run Code Online (Sandbox Code Playgroud)

  • 在Windows 10上重新安装Docker之后,我可以确认第一次单击Docker Quickstart终端快捷方式的结果会创建一个名为"default"的虚拟机(VM)(在几次启动失败后 - 继续运行直到有用).这个"默认"VM可以位于Windows中:`%USERPROFILE%\.docker\machine\machines`(请注意路径中的句号) (16认同)
  • 对于Windows 10,答案不再正确.相反,请参阅@tristan的更新答案,该答案引用了`C:\ Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx` (11认同)
  • 在较新的版本中**boot2docker**现在是**docker-machine**.请参阅https://docs.docker.com/machine/migrate-to-machine/ (6认同)
  • %USERPROFILE%\.docker对于win7设置仍然是正确的. (5认同)
  • 是否可以更改该位置? (3认同)

小智 108

实际上,Docker镜像存储在两个文件中,如下面的命令所示

$ docker info
Run Code Online (Sandbox Code Playgroud)

数据文件: /var/lib/docker/devicemapper/devicemapper/data

元数据文件: /var/lib/docker/devicemapper/devicemapper/metadata

  • 是的,不幸的是,这两行"(Meta)数据文件"并没有出现在每个docker中.这取决于使用的驱动程序 (7认同)
  • 一个正确的答案不是"这就是它在我的机器上的位置." 一个正确的答案是"这是**你怎么在你的机器上找到它**".这是一个正确的答案.我加入了一家公司,拥有11个不同的EBS卷,里面装满了docker图像.这个答案让我弄清楚哪个是当前的**"Root Dir". (5认同)
  • 这适用于RedHat变体.他们[选择不去AUFS,因为它不在主线内核中](http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/). (3认同)
  • 我在 MacOS Catalina 10.15 上的“docker info”中没有看到上述属性 (2认同)

cre*_*ack 68

图像存储在/var/lib/docker/graph/<id>/layer.

请注意,图像只是父图像的差异.父ID与图像的元数据一起存储/var/lib/docker/graph/<id>/json.

当你docker run一个图像.AUFS将所有层"合并"到一个可用的文件系统中.

  • 这个答案现在已经过时了,他们已经改变了一切. (11认同)
  • @Air你能发布什么感动了吗? (7认同)

小智 68

在最新发布的使用Hyper-V的"Docker for Windows"中,数据位于Docker虚拟硬盘中:

C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx

您还可以打开"Hyper-V Manager"以访问Docker/MobyLinuxVM.

  • Windows 10周年更新上的Docker将图像文件放在`C:\ ProgramData\docker\windowsfilter`中.更多信息:http://stackoverflow.com/a/39971954/188740 (12认同)

mbb*_*bce 48

对于使用Docker工具箱(使用docker-machine)的人,Mac OS X上有关boot2docker的答案无效.docker-machine VM称为"default",它存在于/Users/<username>/.docker/machine/machines/default/目录中.

  • 我在该目录中找不到任何容器或图像文件夹. (3认同)
  • 在该目录中查找disk.vmdk (3认同)

tes*_*t30 47

在Ubuntu上,您可以"播放"运行的图像

sudo baobab /var/lib/docker
Run Code Online (Sandbox Code Playgroud)

实际上,图像存储在其中 /var/lib/docker/aufs/diff

屏幕截图显示在/ var/lib/docker上运行的磁盘分析器工具baobab


Tor*_*ene 22

Docker for Windows(本机Windows)中,默认容器存储位于:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Run Code Online (Sandbox Code Playgroud)


小智 21

如果你使用Docker for MAC(不是boot2docker)那么位置就是/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/


Mai*_*ret 11

sudo docker info | grep -e "Root Dir"
Run Code Online (Sandbox Code Playgroud)


Ric*_*ins 7

作为回答在这里,如果你在Mac上,它位于

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Run Code Online (Sandbox Code Playgroud)

  • Docker.qcow2吗?我该如何从中拉取特定的Docker映像? (2认同)

bon*_*oni 7

扩展Tristan的答案,在使用Hyper-V的Windows中,您可以使用matthuisman中的这些步骤移动图像:

在Windows 10中,

  1. 停泊码头等
  2. 在任务栏搜索框中键入"Hyper-V Manager"并运行它.
  3. 在左侧窗格中选择您的PC(我的名为DESKTOP-CBP**)
  4. 右键单击正确的虚拟机(Mine称为MobyLinuxVM)
  5. 选择"关闭"(如果正在运行)
  6. 再次右键单击它并选择"移动"
  7. 按照提示操作

  • 这仅移动Hyper-V机器而不是图像,图像仍将存储在VHD位置所在的位置. (2认同)

ken*_*orb 7

使用docker info命令显示系统范围的信息,位置可能会有所不同。

根据使用的存储驱动程序,可以显示附加信息,例如池名称、数据文件、元数据文件、使用的数据空间、总数据空间、使用的元数据空间和总元数据空间。

数据文件是存储图像的地方,元数据文件是存储关于这些图像的元数据的地方。首次运行时,Docker 会从/var/lib/docker挂载卷上的可用空间中分配一定数量的数据空间和元数据空间。

这是 Ubuntu 上的示例(检查Root Dir):

$ docker info
...
Server Version: 18.06.1-ce
Storage Driver: aufs
 Root Dir: /var/snap/docker/common/var-lib-docker/aufs
...
Docker Root Dir: /var/snap/docker/common/var-lib-docker
...
Run Code Online (Sandbox Code Playgroud)

这是 Travis CI 上的示例(请参阅Docker Root Dir):

$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...
Run Code Online (Sandbox Code Playgroud)

您可以使用--format参数将该信息提取到单个文件中,例如

$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]
Run Code Online (Sandbox Code Playgroud)

或者:

$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
Run Code Online (Sandbox Code Playgroud)


use*_*947 6

如果您记住 Docker 仍在 VM 中运行,则系统路径是相对于 VM 而不是来自 Mac Osx 系统。正如它所说的,所有内容都包含在一个 VM 文件中:

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

尝试使用此卷选项和 ls 命令运行 Alpine 映像,您可以列出 VM 主机:

docker run --rm -it -v /:/vm-root alpine:edge ls -l /vm-root

在此之后尝试:

docker run --rm -it -v /:/vm-root alpine:edge ls -l /vm-root/var/lib/docker

现在,您可以从 VM 主机列出 docker 文件夹


mad*_*rdi 6

使用docker inspect container_id
MergedDir 下的查找文件夹

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
Run Code Online (Sandbox Code Playgroud)


Nis*_*nga 6

对于“Docker 桌面”,单击 docker 系统托盘图标,然后单击“设置”。 在此处输入图片说明

在“高级”选项卡上,您可以看到磁盘映像位置。

在此处输入图片说明


Chu*_*Lai 5

我在 Mac OSX 上为 Docker 使用 boot2docker,因此图像存储到/Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.


oma*_*oud 5

在 Docker for Windows 中,日志位于此处:%USERPROFILE%\AppData\Local\Docker


小智 5

我只能为 Ubuntu 用户回答这个问题:

运行命令可以找到docker的根目录 docker info

Docker 目录将在这一行中给出:“ Docker Root Dir: /var/lib/docker

关于 docker 镜像,它们存储在 docker 目录中: /var/lib/docker/aufs/diff/

请记住,这些东西在所有版本的 docker 中都不相同。目前,我使用的是 1.12.3。


Nic*_*ong 5

环境电压

操作系统:fedora 29 x86_64 workstation

码头工人:

[user@localhost ~]$ docker --version
Docker version 19.03.5, build 633a0ea838
Run Code Online (Sandbox Code Playgroud)

图片信息:"DockerVersion": "18.09.7"


图像应/var/lib/docker/overlay2默认存储在。


我的例子

显示图像:

[user@localhost ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
neo4j               latest              8ed7463b8476        12 months ago       548MB
hello-world         latest              fce289e99eb9        2 years ago         1.84kB
Run Code Online (Sandbox Code Playgroud)

图片大小为548M。

参见 的图像信息8ed7463b8476

[user@localhost ~]$ docker image inspect 8ed7463b8476
Run Code Online (Sandbox Code Playgroud)
... ... ... ...

"DockerVersion": "18.09.7",

... ... ... ...

"GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2
/66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1/diff:
/var/lib/docker/overlay2
/5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/diff:
/var/lib/docker/overlay2
/e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/diff:
/var/lib/docker/overlay2
/9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/diff:
/var/lib/docker/overlay2
/c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/diff:
/var/lib/docker/overlay2
/3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/diff:
/var/lib/docker/overlay2
/463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/diff",

... ... ... ...
Run Code Online (Sandbox Code Playgroud)

让我们看看这些文件夹的大小。

[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1
141M    /var/lib/docker/overlay2/66dc24704d7ea5f1a5dee0bf4a5297cb78bcbd0d4b36206b8cca62cd4de7f2b1
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/
28K /var/lib/docker/overlay2/5ab91cf721359d43d01038233d397fd9ed1c4b3857c0c7d9a2dd7f2ac5eccad0/
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/
100K    /var/lib/docker/overlay2/e82fdf7ee3e37db0a11d9ca309245ae852425d24d6f5d3313dcf604cdddb397b/
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/
310M    /var/lib/docker/overlay2/9394543085d467010d0468fffb388e5616a89e2cf16c1c2b7b31aee4e542ae69/
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/
36K /var/lib/docker/overlay2/c7c7a16e3dbaeea1a3a3b0bbca39f34f08f6b8ab15d753e6e68f9851c80d95b4/
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/
9.5M    /var/lib/docker/overlay2/3b470afdf8939b45159f3171f0bef2a27085b4b980e09f0c666fbdc58b944d97/
[user@localhost ~]$ sudo du -sh /var/lib/docker/overlay2/463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/
76M /var/lib/docker/overlay2/463ba63f79eb6b2f5466e7b71041bc346a8e9c4ebddd34d23422c719824a2340/
Run Code Online (Sandbox Code Playgroud)

我们可以看到大小接近548M。

我们还可以将图像保存到输出文件。

[user@localhost ~]$ docker save -o neo4j.image.tar 8ed7463b8476
[user@localhost ~]$ du -sh neo4j.image.tar 
528M    neo4j.image.tar
Run Code Online (Sandbox Code Playgroud)

我们可以提取包文件并检查包中文件的大小。

[user@localhost neo4j.image]$ du -sh *
16K 2f0dd5fb60a940719a3e781133611cc64c2acded03bd47e04b0997fd0c1dae50
8.7M    73819037a38eabeb7c622533e4058c84f5ff106475a1aba78a278f8b36c172f7
309M    8d31d715b324a2ae3ccb1577e981d492f40e34db6371f0858da925ef02b5762e
12K 8ed7463b84760f09b1b86a732ee6f295baaadffe72ce4fdb7ad306fe5e096bbb.json
36K 966e726ff1d9be9dca68014cda6f1ecf974365c553b82ea3834fff5d73ea593e
70M a32776b9621e916e8714389b1037bf47253a2d3d1c806ad515623d2150c92485
60K d82868a318b95466f213136f81cd7258518744da72f46ca51b04b35f2351f46a
16K e62169d79fab44bebb0a455b01af5f636bace7673a1d38fc092daad77d51cd0e
141M    fe8014622f7933e178b9005deffda3eb4828703eb7eca93b5485232930e3916b
4.0K    manifest.json
Run Code Online (Sandbox Code Playgroud)

我们还可以存档文件夹/var/lib/docker/overlay2/,以将包的大小与图像文件进行比较。尺寸也接近图像尺寸。

更多有用的读物​​:

docker image - GraphDriver 的 merge/diff/work/LowerDir 组件

Docker 镜像存储在哪里?Docker 容器路径解释

覆盖文件系统