繁体   English   中英

NPM 安装在 dockerized env 中失败

[英]NPM install fails in dockerized env

我正在尝试使用 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可以通过?

是否可以在不将根 docker 目录映射到容器中的 www 之上的情况下进行这项工作,以便此 npm 安装可以通过?

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

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

这就是npm issue 6700的内容。
它提出了几种方法:

  • 用于初始化 git 子模块的postinstall脚本。 本例所示
  • 将所有 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中。

我有同样的问题,但可以用.dockerignore文件解决。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM