访问本地文件夹
原文:https://docs.docker.com/guides/walkthroughs/access-local-folder/
本演练将向您展示如何从容器访问本地文件夹。为了更好地理解本演练中的一些概念,请首先完成运行多容器应用程序的演练。
Docker 将容器中的所有内容、代码和数据与您的本地文件系统隔离。默认情况下,容器无法访问您的本地文件系统中的目录。
有时,您可能希望从本地文件系统访问一个目录。为此,您可以使用绑定挂载。
步骤 1: 获取示例应用程序
如果您有 git,可以克隆示例应用程序的仓库。否则,您可以下载示例应用程序。选择以下选项之一。
在终端使用以下命令克隆示例应用程序仓库。
git clone https://github.com/docker/bindmount-apps
步骤 2: 使用 Compose 添加绑定挂载
添加一个绑定挂载以从容器访问您系统上的数据。绑定挂载允许您从主机的文件系统共享一个目录到容器中。
要在此项目中添加绑定挂载,请在代码或文本编辑器中打开 compose.yaml
文件,然后取消注释以下行。
todo-app:
# ...
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
volumes
元素指示 Compose 将本地文件夹 ./app
挂载到 todo-app
服务的容器中的 /usr/src/app
。这种特定的绑定挂载覆盖了容器中 /usr/src/app
目录的静态内容,并创建了所谓的开发容器。第二个指令 /usr/src/app/node_modules
防止绑定挂载覆盖容器的 node_modules
目录,以保留容器中安装的包。
INFO
在 Docker Compose 的配置文件中,volumes
部分用来定义容器与宿主机之间的数据卷映射。这是一个关键功能,因为它允许容器访问宿主机上的文件系统,并持久化数据。在上述配置片段中,有两个卷映射定义:
- ./app:/usr/src/app
- 这一行将宿主机的当前目录下的
app
子目录挂载到容器的/usr/src/app
目录。这意味着容器内的/usr/src/app
目录中的内容将会与宿主机中./app
目录的内容同步。当你在宿主机上修改这个目录中的文件时,这些更改会实时反映到容器中。
- 这一行将宿主机的当前目录下的
- /usr/src/app/node_modules
- 这一行看上去有些不同,因为它只指定了容器内的路径。这实际上是创建了一个匿名卷。匿名卷用于容器内的数据持久化,但不会将数据保存到宿主机的特定位置。这里的用途通常是为了保留
node_modules
目录的内容,使其不受宿主机目录内容的影响(即使宿主机的对应目录被修改或删除)。这样做的好处是可以避免在宿主机和容器之间由于操作系统差异(如 Windows 和 Linux)导致的依赖文件兼容性问题。
- 这一行看上去有些不同,因为它只指定了容器内的路径。这实际上是创建了一个匿名卷。匿名卷用于容器内的数据持久化,但不会将数据保存到宿主机的特定位置。这里的用途通常是为了保留
总结来说,第一行使得源代码能在宿主机和容器之间同步更新,而第二行则确保了容器内的node_modules
的独立性和一致性,避免了由于外部变化而引发的问题。这种设置在开发环境中特别有用,可以确保开发者的环境和生产环境保持一致。
步骤 3: 运行应用程序
在终端中运行以下命令来启动您的应用程序。将 /path/to/bindmount-apps/
替换为您的应用程序目录的路径。
cd /path/to/bindmount-apps/
docker compose up -d
步骤 4: 开发应用程序
现在,您可以利用容器的环境在本地系统上开发应用程序。您在本地系统上对应用程序所做的任何更改都会反映在容器中。在您的本地目录中,打开 app/views/todos.ejs
在代码或文本编辑器中,更新 Enter your task
字符串,并保存文件。访问或刷新 localhost:3001 来查看更改。
总结
在这个演练中,您添加了一个绑定挂载以从容器访问本地文件夹。您可以使用这种方法在更新代码时无需重新构建容器即可加速开发。
相关信息:
- 深入了解绑定挂载
- 在 Compose 文件参考 中学习在 Compose 中使用绑定挂载
- 通过 CLI 在 Docker run 参考 中探索使用绑定挂载