如何避免 Windows 主机上 Docker 中 npm 运行 的符号链接问题?

How can avoid symlink problems with npm running in Docker on a Windows host?

我在 Windows 10.

上使用 latest Docker public beta

我正在开发一个 Node.js 应用程序,我正在使用 Docker 并将我的 src 目录作为卷安装在容器中。

我不能从容器内部 运行 npm install 因为它会导致创建符号链接(在 node_modules 目录中),如果主机是 Windows.

有什么办法可以解决这个问题吗?

我在 Linux 环境中 运行 对此没有任何问题。

经过一番研究,我发现了很多涉及 Virtualbox 的解决方案,适用于 Docker 的 "old" 版本(Docker 工具箱)。

要避免 NPM 出现 symlink 错误,您可以使用命令:

npm install --no-bin-links

但是,为了绝对避免 symlink 问题,您不应将 nodejs 项目设置在挂载目录中(从 Window 挂载)

我是按照下面的方法解决的

在本例中,我将使用 /usr/src 作为要挂载到容器中的目录:

  1. 将您的应用程序的 src 目录挂载到 /usr/src-v /path/to/src:/usr/src
  2. 定义 node_modules 的数据量:-v /usr/src/node_modules

通过这种方式,您将 /path/to/src 挂载到 /usr/src 并且 /usr/src/node_modules 将作为数据卷挂载。

最终结果是,即使在主机上创建了一个 node_modules 目录,它仍然是空的。

此解决方案利用了 Docker Data Volumes.

每当您希望避免挂载目录的子目录中的更改反映在主机上时,这都适用,而不仅仅是 node_modules