创建带数据卷挂载的 docker 容器必须在 docker run 时用 -v 或 --mount 参数一次性完成,已运行容器无法追加;-v 简洁适合初学者,支持命名卷、绑定挂载和匿名卷;--mount 语义清晰、选项丰富,适合生产环境;nginx 示例中挂载命名卷 html 后可直接修改宿主机对应目录文件生效;注意挂载路径权限、不可混用类型及命名卷默认保留。

创建带数据卷挂载的 Docker 容器,核心是在 docker run 命令中使用 -v 或 --mount 参数,且必须在容器启动时一次性完成——已运行的容器无法再追加挂载。
用 -v 快速挂载(推荐初学者)
这是最常用的方式,语法简洁,支持三种挂载形式:
-
命名数据卷(自动创建、Docker 管理):如
-v mydata:/app/data。若mydata不存在,Docker 会自动创建,并将宿主机上/var/lib/docker/volumes/mydata/_data映射到容器内/app/data。 -
绑定挂载(宿主机目录直连):如
-v /home/user/config:/etc/app/conf。路径必须是绝对路径,容器内修改会实时反映在宿主机对应目录。 -
匿名数据卷(仅临时用):如
-v /var/log。Docker 自动分配随机名称,适合无需长期保留或路径不固定的场景。
用 --mount 更明确(适合生产环境)
语义更清晰,参数可读性高,尤其适合需要精细控制的场景:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 挂载命名卷:
--mount source=mydata,target=/app/data - 挂载宿主机目录:
--mount type=bind,source=/home/user/logs,target=/var/log,ro(ro表示只读) - 支持更多选项,比如
consistency=cached(macOS)、volume-driver(插件驱动)等。
实际例子:Nginx 静态页挂载
想让 Nginx 容器的网页内容可随时修改,不重做镜像:
- 命令:
docker run -d --name web -p 80:80 -v html:/usr/share/nginx/html nginx - 执行后,Docker 自动创建名为
html的卷,你可通过docker volume inspect html查到它在宿主机的真实路径(通常是/var/lib/docker/volumes/html/_data) - 直接编辑该路径下的
index.html,刷新浏览器即可生效,无需重启容器。
注意事项
几个关键点容易出错,务必留意:
- 挂载必须在
docker run时指定;容器创建后再想挂载,只能删掉重建。 - 宿主机路径若不存在,
-v绑定挂载会自动创建目录,但权限默认属 root;建议提前mkdir -p并设好属主。 - 命名卷和绑定挂载不能混用同一目标路径;一个容器内多个
-v可同时挂载多个卷或目录。 - 容器删除时,命名卷默认保留(除非加
--rm或手动docker volume prune),确保数据不丢。










