如何在宿主机查看Docker-in-Docker(DinD)构建的镜像
Docker-in-Docker(DinD)构建镜像后宿主机获取镜像信息的解决方案
环境说明
宿主机已安装Docker,已安装包信息如下:
$ apt list --installed docker* Listing... Done docker-ce-cli/focal,now 5:20.10.22~3-0~ubuntu-focal amd64 [installed,upgradable to: 5:24.0.1-1~ubuntu.20.04~focal] docker-ce-rootless-extras/focal,now 5:23.0.3-1~ubuntu.20.04~focal amd64 [installed,upgradable to: 5:24.0.1-1~ubuntu.20.04~focal] docker-ce/focal,now 5:23.0.3-1~ubuntu.20.04~focal amd64 [installed,upgradable to: 5:24.0.1-1~ubuntu.20.04~focal] docker-compose-plugin/focal,now 2.17.2-1~ubuntu.20.04~focal amd64 [installed,upgradable to: 2.18.1-1~ubuntu.20.04~focal] docker-scan-plugin/focal,now 0.23.0~ubuntu-focal amd64 [installed,automatic]
问题场景
使用docker:20.10.12-dind镜像运行DinD容器,并将宿主机目录挂载到容器内的/var/lib/docker目录用于构建镜像。构建完成后,在宿主机执行docker images ls -a无返回结果,需要获取DinD内构建的镜像信息。
解决方案
1. 直接在DinD容器内查看镜像信息
DinD容器运行着独立的Docker daemon,构建的镜像存储在容器自身(或挂载的)/var/lib/docker目录中,直接进入容器执行Docker命令即可查看:
- 查找DinD容器的名称或ID:
docker ps - 进入容器:
docker exec -it <dind-container-id/name> sh - 在容器内执行镜像列表命令:
docker images ls -a
2. 将DinD内的镜像导出到宿主机
如果需要在宿主机使用这些镜像,可通过导出-导入的方式迁移:
- 方法一:利用挂载目录直接导出
在DinD容器内执行导出命令,将镜像保存到已挂载的宿主机目录:
之后在宿主机的挂载目录找到docker save -o /var/lib/docker/image.tar <image-name>:<tag>image.tar,执行导入命令:docker load -i /path/to/host/mounted/dir/image.tar - 方法二:通过docker cp复制镜像包
先在DinD容器内导出镜像到容器临时路径:
再从容器复制到宿主机本地:docker save -o /tmp/image.tar <image-name>:<tag>
最后在宿主机完成导入:docker cp <dind-container-id/name>:/tmp/image.tar /host/local/path/docker load -i /host/local/path/image.tar
3. 调整运行方式共享宿主机Docker daemon(可选)
如果不需要DinD的隔离环境,可让容器直接使用宿主机的Docker daemon,这样构建的镜像会直接出现在宿主机的镜像列表中。运行容器时挂载宿主机的Docker socket:
docker run -v /var/run/docker.sock:/var/run/docker.sock docker:20.10.12-dind
注意:这种方式并非真正的Docker-in-Docker,而是容器共享宿主机的Docker环境,适合不需要独立Docker daemon的场景。
内容的提问来源于stack exchange,提问作者Raniere Silva
相关产品推荐
相关产品推荐

