轻松查看Docker容器内的目录在宿主机的文件路径

问题背景

Docker容器内的文件环境与宿主机的文件环境是隔离开的,想要实现宿主机内的文件与Docker容器内的文件交互就需要挂载。但既然Docker容器是运行在宿主机上的,那么容器内的文件就一定会存储在宿主机上,那么该如何在宿主机的文件环境中定位到Docker容器的文件呢?

解决方案

可以看到当前我的Docker创建了4个容器,我们选取这个名为"doggy"的Java程序作为示例,查看一下Java程序运行产生的文件在宿主机的文件环境中的路径。

容器启动后在宿主机使用Docker命令:

bash 复制代码
docker inspect doggy

在响应信息中找到Data块:

**LowerDir:**包含多个只读层,每个层都对应一个镜像层。Docker镜像是由多个只读层叠加组成的,每一层都是基于上一个层创建的。

**MergedDir:**包含所有层的合并视图。这个目录就是容器运行时的文件系统视图。是一个挂载点。

**UpperDir:**当前容器层的读写层。任何对容器文件系统的写操作都会写入这个目录。我们的Java程序输出的文件就存放在这个层里。

**WorkDir:**工作目录,用于支持挂载操作的实现。当执行一些文件系统操作(如重命名文件或目录)时,会用到这个目录。

bash 复制代码
"Data": {
                "LowerDir": "/var/lib/docker/overlay2/e97a4e2f66a910dc648f71068dd7cba43ff824f151846eea6aa96b9d03578f41-init/diff:/var/lib/docker/overlay2/o8u2yaj6zj9gtzzhqhfmfh18g/diff:/var/lib/docker/overlay2/5eadp2x9hhq8ccema2qw3o51b/diff:/var/lib/docker/overlay2/l6o0eytii95msolwxee4oggu7/diff:/var/lib/docker/overlay2/3188f5f8c352e699ff7a055cac63a4881a39c484ccdf0b12a716c694d185e924/diff:/var/lib/docker/overlay2/34bb19eb78cac49893b53bf760ddf92880aae1e08fb20c8a09b68d6cb8a8eff9/diff:/var/lib/docker/overlay2/fdb6dbdd7ff804ef6ae1dd4eee8fdf644322eca60c26bac18ef420fe7728d13f/diff",
                "MergedDir": "/var/lib/docker/overlay2/e97a4e2f66a910dc648f71068dd7cba43ff824f151846eea6aa96b9d03578f41/merged",
                "UpperDir": "/var/lib/docker/overlay2/e97a4e2f66a910dc648f71068dd7cba43ff824f151846eea6aa96b9d03578f41/diff",
                "WorkDir": "/var/lib/docker/overlay2/e97a4e2f66a910dc648f71068dd7cba43ff824f151846eea6aa96b9d03578f41/work"
            },

因此我们可以找到UpperDir的路径,在宿主机的文件系统打开可以看到:

这个便是我的Java程序运行时的输出目录了。

SSH工具:XTerminal Mac版

相关推荐
AlfredZhao2 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo3 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy5 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
Web3探索者6 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh