Answers:
/var/lib/docker
目录的内容根据Docker用于存储的驱动程序而有所不同。
默认情况下,这将是aufs
,但可以回落到overlay
,overlay2
,btrfs
,devicemapper
或者zfs
根据您的内核支持。在大多数地方,这是可以的,aufs
但是RedHats却接受了devicemapper
。
您可以使用Docker守护程序的-s
或--storage-driver=
选项手动设置存储驱动程序。
/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
元数据docker info
并找到特定于您的设置的实际位置。
Docker for Mac
2张1.5 GB的图像,并且/var/lib
没有目录docker
。
当使用Docker for Mac应用程序时,容器似乎存储在位于以下位置的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 Disk及其中的所有映像和容器。
ubuntu
,nginx
)的位置,还是所有容器的位置?原始问题要求提供图像,而不是容器 ...
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中。
du -hd1 ~/Library/Containers/com.docker.docker/Data/
这是过去的做法,现在已经改变了。自2019年起忽略此答案
在Mac OS X或Windows的特殊情况下,使用boot2docker,则将Docker映像存储在由boot2docker管理的VirtualBox VM中。
该虚拟机将存储在VirtualBox映像的常规位置:
OS X: ~/VirtualBox VMs/boot2docker-vm
视窗: %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 .
%USERPROFILE%\.docker\machine\machines
:(请注意路径中的句号)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
实际上,Docker映像存储在两个文件中,如以下命令所示
$ docker info
资料档案:
/var/lib/docker/devicemapper/devicemapper/data
元数据文件:
/var/lib/docker/devicemapper/devicemapper/metadata
docker info
非常有用,但是输出Docker Root Dir: /var/lib/docker
未指示图像存储位置(请参阅上面的Mac特定答案)。
在使用Hyper-V的最新发布的“ Docker for Windows”上,数据位于Docker虚拟硬盘中:
C:\ Users \ Public \ Documents \ Hyper-V \ Virtual disks \ MobyLinuxVM.vhdx
您也可以打开“ Hyper-V管理器”以访问Docker / MobyLinuxVM。
C:\ProgramData\docker\windowsfilter
为我放置了图像文件。更多信息:stackoverflow.com/a/39971954/188740
图像存储在中/var/lib/docker/graph/<id>/layer
。
请注意,图像只是与父图像的差异。父ID与图像的元数据一起存储/var/lib/docker/graph/<id>/json
。
当您docker run
的图像。AUFS将所有层“合并”到一个可用的文件系统中。
在Ubuntu上,您可以“播放”正在运行的图像
sudo baobab /var/lib/docker
实际上,图像存储在 /var/lib/docker/aufs/diff
对于使用Docker工具箱(使用docker-machine)的用户,有关Mac OS X上boot2docker的答案无效。docker-machine VM被称为“默认”,它存在于/Users/<username>/.docker/machine/machines/default/
目录中。
在Windows的Docker(本地Windows)中,默认容器存储位于:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker build
命令,但没有看到我认为是图像文件的文件。我看到一些文件夹和一些文本文件(例如service.txt)。创建什么类型的文件以及带有什么文件扩展名docker build
?
如果您将Docker用于MAC(不是boot2docker
),则位置为/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/
jasper@~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux $ ls -lh | grep Docker -rw-r--r--@ 1 jasper staff 6.3G May 25 19:20 Docker.qcow2
我找到了图像。但这不是容器。真的没有在此Data目录中看到它们
作为回答在这里,如果你在Mac上,它位于
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
扩展Tristan的答案,在带有Hyper-V的Windows中,您可以通过matthuisman的以下步骤移动图像:
在Windows 10中,
- 停止docker等
- 在任务栏搜索框中键入“ Hyper-V Manager”,然后运行它。
- 在左侧窗格中选择您的PC(我的称为DESKTOP-CBP **)
- 右键单击正确的虚拟机(我的称为MobyLinuxVM)
- 选择“关闭”(如果正在运行)
- 再次右键单击它,然后选择“移动”
- 按照提示
docker build
命令创建的图像。我在Windows 10电脑上。我查看C:\ Users \ Public \ Documents \ Hyper-V \ Virtual硬盘,但我看到的只是MobyLinuxVM.vhdx。实际图像存储在哪里?
如果您记住Docker仍在VM中运行,则系统路径是相对于VM的,而不是来自Mac Osx系统的。一切都包含在VM文件中:
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
尝试使用此卷选项和可以列出VM主机的ls命令运行Alpine映像:
docker运行--rm -it -v /:/ vm-root alpine:edge ls -l / vm-root
之后,只需尝试:
docker运行--rm -it -v /:/ vm-root alpine:edge ls -l / vm-root / var / lib / docker
现在,您可以从VM主机列出docker文件夹
使用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"]]
检查中的docker文件夹 /var/lib
图像存储在以下位置:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
。另请注意,这是由于您的Docker引擎正在overlay2
用作存储驱动程序。
环境:Windows 10 Pro,docker desktop 2.0.3.0 edge
右键单击系统托盘中的docker图标,选择设置-高级:
磁盘映像位置(可通过浏览器编辑):
C:\ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx
(在那里-隐藏了Documents目录)
docker build
命令创建的映像吗?
在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)。
我无法使用上述答案在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
我一起启动后,我终于/tmp/host-volume
从macOS中获得了来自容器内可写卷的共享:
> 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
希望这也能帮助其他人。
根据Docker入门指南, “您构建的映像”是“在您计算机的本地Docker映像注册表中”。
这对我来说仍然很奇怪,因为现在它引发了问题。我的机器的本地Docker映像注册表在哪里?
不过,我绝对认为此信息值得分享。
如果有人出于脚本目的需要它,这是一种单行解决方案。
在启用了PCRE的POSIX Shell中grep
,尝试:
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容器”模式下DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"
,但最后它是一个文件,而不是目录
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
列出此目录的内容。