6-docker知识

1. 挂载相关问题

Question

我使用-v /:/mnt 挂载了目录,为什么在 /var/lib/docker/overlay2/id/merge/mnt看不到, 使用docker exec 进入后可以在容器内的mnt看到

Pasted image 20250418111822

宿主机文件系统
├── / (根目录)
│   ├── bin, etc, home...  # 宿主机真实文件
│
└── /var/lib/docker/overlay2/<容器ID>/merged
    ├── bin, etc...        # 来自镜像的文件
    └── mnt                # 空目录(镜像层中的占位符)

容器运行时视图(通过 Mount Namespace)
├── / (来自 overlay2 的 merged 目录)
│   ├── bin, etc...        # 容器自己的文件
│   └── mnt                << 这里被 -v /:/mnt 覆盖挂载为宿主机根目录
  • /proc/容器PID/root 访问的正是当前运行中的容器实时文件系统(容器进行时)
  • /proc/容器PID/root 是一个指向宿主机 /var/lib/docker/overlay2/<容器层ID>/merged 的符号连接
  • 普通docker组用户无法通过/proc/容器PID/root 访问容器进行时,即使是自己创建的容器
    自己创建一个特权容器也无法访问 Pasted image 20250418113122

2. 判断是不是在容器里面

  1. df -h 看overlay, 如果是 / 那么就是docker
    Pasted image 20250419195059
    Pasted image 20250419195135