在Ubuntu环境下,将宿主机代码挂载到Docker容器主要通过docker run命令的-v(或--mount)参数实现,用户需指定宿主机源目录路径和容器内目标路径,从而建立映射关系,这种挂载方式不仅能实现代码的实时同步,还允许在容器内直接修改宿主机代码,无需重新构建Docker镜像,极大提高了开发和调试的效率。
在开发和部署过程中,我们经常需要在 Ubuntu 系统中运行 Docker 容器,为了方便调试和实时查看代码修改的效果,我们通常不希望每次修改代码后都重新构建 Docker 镜像,这时,我们就需要将宿主机的代码目录“粘贴”或“映射”到容器内部。
在 Docker 术语中,这被称为挂载或绑定挂载,下面我将详细介绍在 Ubuntu 中实现这一操作的两种主要方法。
使用 -v 参数(绑定挂载)
这是最常用、最快捷的方法,通过 -v 参数,你可以将宿主机的任意目录映射到容器内的指定路径。

基本语法:
docker run -v [宿主机路径]:[容器内路径] [镜像名称]
操作步骤示例:
-
创建测试目录和代码: 在宿主机创建一个文件夹并写一个简单的 Python 脚本:
mkdir my_project cd my_project echo "print('Hello from Docker!')" > app.py -
运行容器并挂载: 假设我们要运行一个 Python 容器,并将当前目录 () 挂载到容器的
/app目录:docker run -it -v $(pwd):/app python:latest /bin/bash
$(pwd)是获取当前宿主机路径的命令。/app是容器内的工作目录。
-
验证效果: 进入容器后,你可以直接看到宿主机的
app.py文件,你可以在宿主机上修改app.py,容器内的代码也会实时更新。
使用 --mount 参数(卷挂载)
随着 Docker 版本的更新,官方更推荐使用 --mount 参数,因为它结构更清晰,且支持更多高级选项(如只读模式)。
基本语法:
docker run --mount type=bind,source=[宿主机路径],target=[容器内路径] [镜像名称]
示例:
docker run -it --mount type=bind,source=/home/user/code,target=/app node:latest /bin/bash
实际开发场景:Web 应用调试
假设你正在开发一个 Node.js Web 项目,通常的流程如下:
- 在宿主机运行项目:
docker run -p 3000:3000 -v /home/developer/myapp:/usr/src/app -w /usr/src/app node:18 npm start
-w /usr/src/app:设置容器内的工作目录。- 这样,你在宿主机修改代码并保存,Nginx 或前端页面就能立即看到变化,无需重启容器。
常见注意事项
- 权限问题: 如果宿主机目录的所有者是
root,而容器内以非 root 用户运行,可能会报错,可以通过在宿主机修改目录权限(如chmod 777)或在容器内使用sudo来解决。 - 路径格式: 在 Linux 和 macOS 中,路径
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

