使用 Podman
在容器和宿主机 Btrfs 文件系统之间共享文件
备注
此方法仅适用于 Podman 支持的写时复制(copy-on-write)文件系统,如 Btrfs。对于其他文件系统(如 Ext4),pnpm 将会复制文件。
Podman 支持像 Btrfs 这样的写时复制文件系统。使用 Btrfs 时,容器运行时会为其挂载的卷创建实际的 Btrfs 子卷。pnpm 可以利用这一特性在不同的挂载卷之间创建文件引用链接(reflink)。
要在宿主机和容器之间共享文件 ,需要将宿主机的 store 目录和 node_modules
目录挂载到容器中。这样,容器内的 pnpm 就可以自然地通过引用链接重用宿主机中的文件。
以下是一个示例容器配置:
Dockerfile
FROM node:20-slim
# corepack 是 Node.js v20 中的一个实验性功能,它允许
# 安装和管理 pnpm、npm、yarn 的版本
RUN corepack enable
VOLUME [ "/pnpm-store", "/app/node_modules" ]
RUN pnpm config --global set store-dir /pnpm-store
# 在你的代码中可能需要复制更多文件,而不仅仅是 package.json
COPY package.json /app/package.json
WORKDIR /app
RUN pnpm install
RUN pnpm run build
运行以下命令来构建 podman 镜像:
podman build . --tag my-podman-image:latest -v "$HOME/.local/share/pnpm/store:/pnpm-store" -v "$(pwd)/node_modules:/app/node_modules"