我设法在/var/lib/docker/containers目录下找到了容器,但我找不到图像。
/var/lib/docker下的目录和文件是什么?
我设法在/var/lib/docker/containers目录下找到了容器,但我找不到图像。
/var/lib/docker下的目录和文件是什么?
当前回答
在Docker for Windows(本地Windows)中,默认的容器存储在:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
其他回答
ENV
操作系统:fedora 29 x86_64工作站
码头工人:
[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
图像大小为548M。
查看8ed7463b8476的镜像信息。
[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/
我们可以看到接近548M的尺寸。
我们还可以将图像保存到输出文件中。
[user@localhost ~]$ docker save -o neo4j.image.tar 8ed7463b8476
[user@localhost ~]$ du -sh neo4j.image.tar
528M neo4j.image.tar
我们可以提取包文件,并检查包中文件的大小。
[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/文件夹存档,以便将包的大小与图像文件进行比较。大小也接近图像大小。
更多有用的阅读:
docker image - GraphDriver的合并/diff/work/LowerDir组件,
Docker镜像存储在哪里?Docker容器路径解释,
覆盖文件系统
图像存储在/var/lib/docker中,然后在适用的存储驱动目录下。
使用的存储驱动可以通过执行docker info命令来确定。
使用docker info命令获取docker的主机设置,包括docker的存储路径。
获取docker存储的根路径:
docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g'
这给出了默认的Ubuntu 22.04和docker——version = docker version 20.10.17, build 100c701安装路径:
/var/lib/docker
使用命令列出该目录的内容和大小:
du -h -d 1 .
给出结果(其他目录):
444K ./buildkit
4,0K ./containers
4,0K ./runtimes
16K ./plugins
4,0K ./trust
4,0K ./tmp
100K ./network
22M ./image
2,0G ./volumes
4,0K ./swarm
9,0G ./overlay2
为了让docker根路径以目录名的一个后缀,你可以在sed 's/$/\/image/g'的末尾添加另一个sed,以后缀/image
命令:
docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g' | sed 's/$/\/image/g'
给:
/var/lib/docker/image
命令:
docker info | grep 'Docker Root Dir:' | cut -d':' -f2 | sed 's/^ *//g' | sed 's/$/\/overlay2/g'
给:
/var/lib/docker/overlay2
虽然目录的名称似乎不言自明,但图像的内容并不存储在图像目录(22M大小)中,而是存储在图像的信息中。/var/lib/docker/image/overlay2,尤其是/var/lib/docker/image/overlay2/repositories。Json文件,其中包含图像的名称和对应的关于overlay2层的数据。
图像(及其层)的实际数据存储在/var/lib/docker/overlay2(大小为9,0g)
请注意,存储图像重数据的overlay2是docker使用的分层系统,但该分层系统是docker可能使用的众多系统之一(现在或将来)。因此基于硬编码的路径可能是脆弱的。
特别是如果你的意图是将图像导出/保存到文件中,你应该寻找专用的命令:
Docker中保存和导出的区别是什么?
使用上述问题中的命令,您甚至可以将所有图像保存到一个文件中,压缩它,然后通过单个命令将它们导入到其他地方。
如果你想坚持docker路径,例如创建备份,我建议总是使用根路径,例如:
/var/lib/docker
由docker info命令生成,特别是你可能有重要的数据在里面:
/var/lib/docker/volumes
这是for所要求的。通过使用卷持久化数据的数据库映像。
我只能对Ubuntu用户回答这个问题:
使用docker info命令可以找到docker的根目录
Docker目录将在这一行中给出:"Docker根目录:/var/lib/docker"
关于docker镜像,它们存储在docker目录中: /var/lib/docker/aufs/diff/
记住这些东西在docker的所有版本中都是不一样的。目前,我使用的是1.12.3。
使用docker info命令显示系统范围的信息,位置可能不同。
根据使用的存储驱动程序,还可以显示其他信息,如池名称、数据文件、元数据文件、已使用的数据空间、总数据空间、已使用的元数据空间和总元数据空间。 数据文件是存储图像的地方,元数据文件是存储关于这些图像的元数据的地方。第一次运行时,Docker从挂载/var/lib/docker的卷的可用空间中分配一定数量的数据空间和元数据空间。
下面是Ubuntu的例子(检查根目录):
$ 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根目录):
$ 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]]
or:
$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]