如何简化Docker绑定挂载容器文件系统的查找流程?
简化Docker容器卷与文件系统路径的查找流程
问题背景
我有多台容器,卷配置如下:
volumes: - /opt/App/${COMPOSE_PROJECT_NAME}/temp:/usr/local/tomcat/temp - /opt/App/${COMPOSE_PROJECT_NAME}/logs:/usr/local/tomcat/logs - /opt/App/${COMPOSE_PROJECT_NAME}/database:/usr/local/tomcat/database - /opt/App/${COMPOSE_PROJECT_NAME}/backups:/usr/local/tomcat/backups
目前我使用一套繁琐的步骤查找容器文件系统中的卷:
docker ps --no-trunc --format "table {{.ID}} {{.Names}} {{.Status}}" # 查找容器ID docker inspect --format '{{json .Mounts}}' <container_id> # 查找容器文件系统ID updatedb locate <id_filesystem> cd /var/lib/docker/overlay2/<id_filesystem>/diff/usr/local/tomcat # diretório do Orion
我曾尝试用grep从docker inspect的JSON输出中查找容器的UpperDir,但未成功。暂不想编写脚本,希望简化现有流程。
简化方案
1. 直接提取UpperDir并跳转路径
无需通过文件系统ID定位,直接用docker inspect的格式化输出获取容器层的UpperDir,一步完成跳转:
cd $(docker inspect --format '{{.GraphDriver.Data.UpperDir}}' <container_id_or_name>)/usr/local/tomcat
2. 快速查看容器挂载详情
如果需要同时确认绑定卷和容器层路径,用更直观的格式化输出一次性查看:
docker inspect --format '容器名: {{.Name}} 绑定卷列表: {{range .Mounts}}- {{.Source}} → {{.Destination}}{{"\n"}}{{end}} 容器层路径: {{.GraphDriver.Data.UpperDir}}' <container_id_or_name>
3. 用grep提取UpperDir的正确方式
之前用grep失败是因为docker inspect的JSON输出是压缩格式,先格式化再过滤即可:
# 方式一:用jq工具(需先安装jq) docker inspect <container_id_or_name> | jq '.[] | .GraphDriver.Data.UpperDir' # 方式二:仅用基础工具awk+sed docker inspect <container_id_or_name> | grep -o '"UpperDir":"[^"]*"' | sed 's/"UpperDir":"//;s/"$//'
4. 简化容器ID/名称查找
如果记不清容器全称,用docker ps的简化格式快速筛选:
docker ps --format "table {{.ID}} {{.Names}}"
内容的提问来源于stack exchange,提问作者farchettiensis
相关产品推荐
相关产品推荐

