在dockerized env中NPM安装失败

时间:2018-03-02 10:24:17

标签: git docker npm

我正在尝试使用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/*

是否可以在没有将根目标docker目录映射到容器中www之上的情况下完成此工作,以便npm install可以通过?

2 个答案:

答案 0 :(得分:3)

  

是否可以在没有将根目标docker目录映射到容器中的www之上的情况下完成此工作,以便这个npm安装可以通过?

这可能是一个挑战,考虑到在docker build进程中,所有与Git相关的文件夹都会被忽略(根据您的.dockerignore文件)。

  

我真的需要一个关于如何处理与git子存储库相关的npm install的答案

这就是npm issue 6700的含义 它提出了几种方法:

  
      
  • 用于初始化git子模块的postinstall脚本。如in this example
  •   
  • 将所有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存储库,您可以立即查看更改,而无需重新安装,重新下载等。

     

第二种方法是有前途的,前提是您可以将预先初始化的子模块存储库装载到单独的路径中,并使用npm link引用正确的文件夹,同时仍在/var/www/html

答案 1 :(得分:0)

我遇到了同样的问题,但是可以用一个.dockerignore文件来解决。

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

但在Dockerfile级别(而src是子存储库),而不是在顶层。