Docker环境中NPM安装失败

4

我正在尝试使用Docker设置一些传统项目。为此,我创建了一个包含docker文件的主存储库,并将实际项目作为submodule添加。结果如下:

root
|- data
|- etc
|  |-php
|  |-etc
|- project
|  |- .git
|  |- (actual project files)
|- docker-compose.yml
|- .dockerignore

在这种设置中,project/.git 只是一个包含 gitdir: ../.git/modules/project 的文本文件。

现在,在 docker-compose.yml 中我有以下映射的卷:
- ${APP_PATH}:/var/www/html

在这个容器内,我安装了npm install(我知道应该为node准备单独的容器,但目前我需要运行我所拥有的)。这会导致以下git问题:

root@06fc2e3fe52a:/var/www/html# npm install
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@github.com/bengourley/stack-generator.git
npm ERR! 
npm ERR! fatal: Not a git repository: ../.git/modules/project

我已经创建了以下.dockerignore文件:

project/.git
project/.gitignore
project/.gitattributes
.git
Dockerfile
.DS_Store
.gitignore
README.md
/tmp/*

是否有可能在不映射容器中的 www 目录之上的根 Docker 目录的情况下使此工作正常,以便进行 npm install?

2个回答

2
“是否可以在不映射容器中www目录上方的根docker目录的情况下使其工作,以便进行此npm安装?”这可能有些困难,因为在“docker build”过程中,所有与Git相关的文件夹都被忽略(根据您的“.dockerignore”文件)。 “我真的需要一个关于如何处理与git子存储库相关的npm安装的答案。”这就是npm issue 6700所讨论的内容。它提出了几种方法:“使用postinstall脚本来初始化git子模块,例如{{link2:在这个示例中} }”,或者将所有git存储库检出到平行目录中。
src/
src/mod1
src/mod2
src/mod3

然后使用 npm link 连接依赖项:
$ cd src/mod1
$ npm link
# this makes a link from the system-wide node_modules to the current dir 
$ cd ../mod2
$ npm link mod1
# this makes a link from node_modules/mod1 to ../mod2

如果您在mod1或mod2中进行更改,那么可以将这些更改提交到相应的git存储库中,而无需重新安装、重新下载等操作即可立即查看更改。使用grunt-git软件包实现此目的。
第二种方法很有前途,只要您能够将预初始化的子模块仓库挂载到单独的路径中,并在仍在/var/www/html中的情况下使用npm link引用正确的文件夹即可。

1

我曾经遇到过同样的问题,但是通过一个.dockerignore文件解决了它。

src/.git
src/.gitignore
src/.gitattributes

但是在 Dockerfile 的级别上(而 src 是子仓库),而不是在顶层。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接