我设法找到目录/var/lib/docker/containers
下的容器,但我找不到图像。
/var/lib/docker
下的目录和文件是什么?
答案 0 :(得分:531)
/var/lib/docker
目录的内容因driver Docker is using for storage而异。
默认情况下,这将是aufs
,但可以回退到overlay
,overlay2
,btrfs
,devicemapper
或zfs
,具体取决于您的身份内核支持。在大多数地方,这将是aufs
,但RedHats went with devicemapper
。
您可以使用-s
or --storage-driver=
选项手动设置存储驱动程序Docker daemon。
/var/lib/docker/{driver-name}
将包含图像内容的驱动程序特定存储空间。 /var/lib/docker/graph/<id>
现在只包含json
和layersize
文件中有关图片的元数据。如果是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
答案 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中,
- 停止码头等
- Type&#34; Hyper-V Manager&#34;在任务栏搜索框中运行它。
- 在左侧窗格中选择您的电脑(我的电话被调用 DESKTOP-CBP **)
- 右键单击正确的虚拟机(我的是 称为MobyLinuxVM)
- 选择&#34;关闭&#34; (如果正在运行)
- 再次右键单击它并选择&#34; Move&#34;
- 按照提示
醇>
答案 13 :(得分:3)
我只能为Ubuntu用户回答这个问题:
运行命令docker info
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
图像存储在以下位置:
/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,
答案 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)
答案 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映像注册表中。”
这对我来说仍然很奇怪,因为现在它引发了问题。我的机器的本地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容器”模式下