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

时间:2013-10-07 21:08:49

标签: docker docker-image

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

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

29 个答案:

答案 0 :(得分:531)

/var/lib/docker目录的内容因driver Docker is using for storage而异。

默认情况下,这将是aufs,但可以回退到overlayoverlay2btrfsdevicemapperzfs,具体取决于您的身份内核支持。在大多数地方,这将是aufs,但RedHats went with devicemapper

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

  • /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元数据
  • 请注意,这些文件是精简配置的“稀疏”文件,所以没有看起来那么大。

答案 1 :(得分:262)

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

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

更新(由mmorin提供):

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

~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw

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

答案 2 :(得分:120)

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

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

OS X:~/VirtualBox VMs/boot2docker-vm

Windows:%USERPROFILE%/VirtualBox VMs/boot2docker-vm

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

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

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

docker build -t webapp --rm=true --force-rm=true .

而不是:

docker build -t webapp .

答案 3 :(得分:94)

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

所示
$ docker info
  

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

     

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

答案 4 :(得分:68)

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

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

当你docker run成像时。 AUFS会将所有层“合并”到一个可用的文件系统中。

答案 5 :(得分:62)

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

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

您还可以打开“Hyper-V Manager”以访问Docker / MobyLinuxVM。

答案 6 :(得分:46)

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

答案 7 :(得分:39)

在Ubuntu上你可以&#34;玩&#34;图像正在运行

sudo baobab /var/lib/docker

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

screenshot showing disk analyzer tool baobab running on /var/lib/docker

答案 8 :(得分:21)

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

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...

答案 9 :(得分:20)

如果您使用Docker for MAC(不是boot2docker),则位置为/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

答案 10 :(得分:8)

sudo docker info | grep -e "Root Dir"

答案 11 :(得分:6)

在回答here时,如果您使用的是Mac,则它位于

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

答案 12 :(得分:5)

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

  

在Windows 10中,

     
      
  1. 停止码头等
  2.   
  3. Type&#34; Hyper-V Manager&#34;在任务栏搜索框中运行它。
  4.   
  5. 在左侧窗格中选择您的电脑(我的电话被调用   DESKTOP-CBP **)
  6.   
  7. 右键单击正确的虚拟机(我的是   称为MobyLinuxVM)
  8.   
  9. 选择&#34;关闭&#34; (如果正在运行)
  10.   
  11. 再次右键单击它并选择&#34; Move&#34;
  12.   
  13. 按照提示
  14.   

答案 13 :(得分:3)

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

运行命令docker info

时,可以找到docker的根目录

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

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

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

答案 14 :(得分:3)

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

  

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

尝试使用此卷选项运行Alpine映像,并使用ls命令列出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-根的/ var / lib中/搬运工

现在,您可以列出来自WM主机的docker文件夹

答案 15 :(得分:3)

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

答案 16 :(得分:2)

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

答案 17 :(得分:2)

检查/var/lib

中的docker文件夹

图像存储在以下位置:

/var/lib/docker/image/overlay2/imagedb/content

答案 18 :(得分:2)

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

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 

答案 19 :(得分:2)

环境

操作系统:[user@localhost ~]$ docker --version Docker version 19.03.5, build 633a0ea838

码头工人:

"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 中。


我的例子

显示图片:

8ed7463b8476

图片大小为 548M。

查看[user@localhost ~]$ docker image inspect 8ed7463b8476 的图片信息。

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

"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",

... ... ... ...
[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/

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

[user@localhost ~]$ docker save -o neo4j.image.tar 8ed7463b8476
[user@localhost ~]$ du -sh neo4j.image.tar 
528M    neo4j.image.tar

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

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

[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

我们可以解压包文件,查看包内文件的大小。

/var/lib/docker/overlay2/

我们还可以将文件夹 {{1}} 存档以将包的大小与图像文件进行比较。尺寸也接近图片尺寸。

更多有用的阅读:

docker image - merged/diff/work/LowerDir components of GraphDriver,

Where are Docker Images Stored? Docker Container Paths Explained,

Overlay Filesystem

答案 20 :(得分:1)

使用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
...

这是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
...

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

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

或:

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

答案 21 :(得分:1)

对于“ Docker Desktop”,单击docker系统任务栏图标,然后单击“设置”。 enter image description here

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

enter image description here

答案 22 :(得分:0)

在Fedora上,如果可用,Docker会使用LVM进行存储。在我的系统docker info上显示:

Storage Driver: devicemapper
 Pool Name: vg01-docker--pool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file:
 Metadata file:
 Data Space Used: 9.622 GB
 ...

在这种情况下,要增加存储空间,您必须使用LVM命令行工具或兼容的分区管理器,例如 blivet

答案 23 :(得分:0)

在Windows 2016中,docker(DockerMsftProvider)在docker根目录下使用文件夹“ windowsfilter”

>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...

它使用docker根目录下的“ tmp”文件夹下载文件,并将下载的文件解压缩到“ windowsfilter”文件夹后删除文件。

答案 24 :(得分:0)

使用上述答案,我无法在macOS上使用Docker版本18.09解决问题,然后重试。

对我而言,唯一实际的解决方案是使用以下docker-compose.yml配置:

version: '3.7'
...
  services:
    demo-service:
      volumes:
        - data-volume:/var/tmp/container-volume

volumes:
  data-volume:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /tmp/host-volume

使用docker-compose up启动之后,我终于从容器中以可写卷的形式共享了来自macOS的/tmp/host-volume

> docker exec -it 1234 /bin/bash
bash-4.4$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
...
osxfs                488347692 464780044  21836472  96% /var/tmp/container-volume

希望这对其他人也有帮助。

答案 25 :(得分:0)

环境:Windows 10 Pro,docker桌面2.0.3.0边缘

右键单击系统任务栏中的docker图标,选择设置-高级:

磁盘映像位置(可通过浏览器编辑):

C:\ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx

(在那里-Documents目录被隐藏)

答案 26 :(得分:0)

图像存储在/var/lib/docker内,然后在适用的storage driver目录下。

正在使用的存储驱动程序可以通过执行docker info命令来确定。

答案 27 :(得分:0)

根据Docker Getting Started guide“您构建的映像”是“在您计算机的本地Docker映像注册表中。”

enter image description here

这对我来说仍然很奇怪,因为现在它引发了问题。我的机器的本地Docker映像注册表在哪里?

尽管如此,我绝对认为值得分享这些信息作为答案。

答案 28 :(得分:0)

如果有人出于脚本目的需要它,这是一种单行解决方案。

在启用了PCRE的grep的POSIX Shell中,尝试:

DOCKER_ROOT_DIR="$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"

在PowerShell中:

$DOCKER_ROOT_DIR="$(docker info 2>&1 | foreach {if($_ -match "Docker Root Dir"){$_.TrimStart("Docker Root Dir: ")}})"

注意,在Windows 10(自10.0.18999.1起)上,在默认配置下,它将返回:

  • C:\ProgramData\Docker处于“ Windows容器”模式
  • /var/lib/docker,在“ Linux容器”模式下