Ubuntu 环境下如何将宿主机代码挂载到 Docker 容器中

admin
在Ubuntu环境下,将宿主机代码挂载到Docker容器主要通过docker run命令的-v(或--mount)参数实现,用户需指定宿主机源目录路径和容器内目标路径,从而建立映射关系,这种挂载方式不仅能实现代码的实时同步,还允许在容器内直接修改宿主机代码,无需重新构建Docker镜像,极大提高了开发和调试的效率。

在开发和部署过程中,我们经常需要在 Ubuntu 系统中运行 Docker 容器,为了方便调试和实时查看代码修改的效果,我们通常不希望每次修改代码后都重新构建 Docker 镜像,这时,我们就需要将宿主机的代码目录“粘贴”或“映射”到容器内部。

在 Docker 术语中,这被称为挂载绑定挂载,下面我将详细介绍在 Ubuntu 中实现这一操作的两种主要方法。

使用 -v 参数(绑定挂载)

这是最常用、最快捷的方法,通过 -v 参数,你可以将宿主机的任意目录映射到容器内的指定路径。

Ubuntu 环境下如何将宿主机代码挂载到 Docker 容器中

基本语法:

docker run -v [宿主机路径]:[容器内路径] [镜像名称]

操作步骤示例:

  1. 创建测试目录和代码: 在宿主机创建一个文件夹并写一个简单的 Python 脚本:

    mkdir my_project
    cd my_project
    echo "print('Hello from Docker!')" > app.py
  2. 运行容器并挂载: 假设我们要运行一个 Python 容器,并将当前目录 () 挂载到容器的 /app 目录:

    docker run -it -v $(pwd):/app python:latest /bin/bash
    • $(pwd) 是获取当前宿主机路径的命令。
    • /app 是容器内的工作目录。
  3. 验证效果: 进入容器后,你可以直接看到宿主机的 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 项目,通常的流程如下:

  1. 在宿主机运行项目:
    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原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码