Docker 启动时做文件夹映射

在使用 Docker 运行容器时,经常需要将主机上的文件夹映射到容器内部,以便容器可以访问主机上的文件。这种做法非常有用,可以方便地与容器中的数据进行交互,同时也可以确保数据的持久性。本文将介绍如何在 Docker 启动时做文件夹映射,并给出具体的代码示例。

为什么要做文件夹映射

在 Docker 中,容器是独立于主机的运行环境,容器内的文件系统是隔离的。为了让容器可以访问主机上的文件,我们可以通过文件夹映射的方式将主机上的文件夹映射到容器内部。这样一来,容器就可以直接操作主机上的文件,实现数据的共享和交互。

另外,通过文件夹映射,我们还可以将容器内部生成的数据保存到主机上,以确保数据的持久性。例如,在运行数据库容器时,我们通常会将数据库数据目录映射到主机上,以防止容器删除后数据丢失。

如何做文件夹映射

在 Docker 启动容器时,可以通过 -v 参数指定文件夹映射的方式。具体的语法如下:

docker run -v <host_path>:<container_path> <image_name>

其中,<host_path> 是主机上的文件夹路径,<container_path> 是容器内部的文件夹路径,<image_name> 是要运行的 Docker 镜像名称。

例如,假设我们要将主机上的 /data 文件夹映射到容器内的 /app/data 文件夹,可以这样启动容器:

docker run -v /data:/app/data my_image

这样一来,容器内的 /app/data 文件夹就会与主机上的 /data 文件夹映射在一起,实现数据的共享和交互。

代码示例

下面给出一个具体的代码示例,演示如何在 Docker 启动时做文件夹映射。假设我们有一个简单的 Node.js 应用,需要将主机上的 /app 文件夹映射到容器内部,可以按照以下步骤进行:

  1. 创建一个 Node.js 应用,并在 /app 文件夹下创建一个 index.js 文件,内容如下:
const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
  1. 创建一个 Dockerfile 文件,内容如下:
FROM node:14

WORKDIR /app

COPY package.json .
RUN npm install

COPY . .

CMD ["node", "index.js"]
  1. 构建 Docker 镜像并运行容器,指定文件夹映射:
docker build -t my_node_app .
docker run -v /app:/app my_node_app

这样一来,主机上的 /app 文件夹就会被映射到容器内,Node.js 应用将在容器中运行,并可以访问主机上的文件。

总结

通过文件夹映射,我们可以方便地与 Docker 容器中的数据进行交互,同时也可以确保数据的持久性。在启动 Docker 容器时,只需要通过 -v 参数指定文件夹映射的方式即可实现。希望本文对您有所帮助,谢谢阅读!

参考资料

  • Docker 官方文档:
  • Node.js 官方文档: