# 绑定挂载（Bind mounts）

URL: https://caijiao.org/docker/storage/bind-mounts
Source: docs/docker/storage/bind-mounts.md
Description: 本章节介绍 Docker 绑定挂载（Bind mounts）的概念、用法及注意事项，包括将宿主机目录挂载到容器中，实现数据共享、调试和持久化。

绑定挂载（Bind mounts）是将宿主机的文件或目录直接挂载到容器内的机制，使容器可以访问宿主机的数据。

## 1. Bind mounts 特点

- 数据存储在宿主机指定路径，容器删除不会影响宿主机文件
- 容器可以实时访问宿主机文件，适合开发和调试
- 需要注意权限和安全问题

## 2. 使用 bind mount

```bash
docker run -d \
  -v /host/path:/container/path \
  myapp
````

- `/host/path`：宿主机目录
- `/container/path`：容器内挂载路径

示例：

```bash
docker run -d \
  -v /home/user/app/config:/app/config \
  myapp
```

## 3. 只读绑定挂载

```bash
docker run -d \
  -v /host/path:/container/path:ro \
  myapp
```

- `ro`：只读，防止容器修改宿主机数据
- 默认挂载为可读写（rw）

## 4. 与卷的区别

| 特性   | 卷（Volumes） | Bind Mounts |
| ---- | ---------- | ----------- |
| 数据位置 | Docker 管理  | 宿主机指定路径     |
| 生命周期 | 独立于容器      | 与宿主机目录绑定    |
| 使用场景 | 生产环境数据持久化  | 开发调试、日志挂载   |
| 性能   | 高          | 取决于宿主机文件系统  |

## 5. 使用注意事项

- 避免在生产环境随意挂载宿主机敏感目录
- 确保容器运行用户有访问宿主机目录权限
- 调试容器时，Bind mount 可以实现代码实时同步
- 配合 Docker Compose 管理更方便：

```yaml
services:
  app:
    image: myapp
    volumes:
      - ./config:/app/config:ro
```

---

绑定挂载提供了灵活的数据访问方式，非常适合开发和调试环境，但在生产环境使用需注意安全和权限管理。
