github编辑

8.2 挂载主机目录

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

8.3.1 什么是绑定挂载

Bind Mount (绑定挂载) 将 宿主机的目录或文件 直接挂载到容器中。容器可以读写宿主机的文件系统。

spinner

8.3.2 Bind Mount vs Volume

相关信息如下表:

特性
Bind Mount
Volume

数据位置

宿主机任意路径

Docker 管理的目录

路径指定

必须是绝对路径

卷名

可移植性

依赖宿主机路径

更好 (Docker 管理)

性能

依赖宿主机文件系统

优化的存储驱动

适用场景

开发环境、配置文件

生产数据持久化

备份

直接访问文件

需要通过 Docker

概述

总体概述了以下内容。

选择建议

相关信息如下表:

需求
推荐方案

开发时同步代码

Bind Mount

持久化数据库数据

Volume

共享配置文件

Bind Mount

容器间共享数据

Volume

备份方便

Bind Mount (直接访问)

生产环境

Volume


8.3.3 基本语法

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

使用 --mount (推荐)

运行以下命令:

使用 -v (简写)

运行以下命令:

两种语法对比

相关信息如下表:

特性
--mount
-v

语法

键值对,更清晰

冒号分隔,更简洁

路径不存在时

报错

自动创建目录

推荐程度

✅ 推荐

常用


8.3.4 使用场景

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

场景一:开发环境代码同步

运行以下命令:

场景二:配置文件挂载

运行以下命令:

场景三:日志收集

运行以下命令:

场景四:共享 SSH 密钥

运行以下命令:


8.3.5 只读挂载

防止容器修改宿主机文件:

容器内尝试写入会报错:


8.3.6 挂载单个文件

运行以下命令:

⚠️ 注意:挂载单个文件时,如果宿主机上的文件被编辑器替换 (而非原地修改),容器内仍是旧文件的 inode。建议重启容器或挂载目录。


8.3.7 查看挂载信息

运行以下命令:

输出:

字段
说明

Type

挂载类型 (bind)

Source

宿主机路径

Destination

容器内路径

RW

是否可读写

Propagation

挂载传播模式


8.3.8 常见问题

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

Q:路径不存在报错

运行以下命令:

解决:确保源路径存在,或改用 -v (会自动创建)

Q:权限问题

容器内用户可能无权访问挂载的文件:

Q:macOS/Windows 性能问题

在 Docker Desktop 上,Bind Mount 性能较差 (需要跨文件系统同步):

选项
说明

:cached

宿主机权威,容器读取可能延迟

:delegated

容器权威,宿主机读取可能延迟

:consistent

默认,完全一致 (最慢)


8.3.9 最佳实践

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

1. 开发环境使用 Bind Mount

运行以下命令:

2. 生产环境使用 Volume

运行以下命令:

3. 配置文件使用只读挂载

运行以下命令:

4. 注意路径安全

运行以下命令:


最后更新于