我正在尝试用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://[email protected]/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
可以通过?
是否可以在没有将根目标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存储库,您可以立即看到更改,而无需重新安装,重新下载等。
第二种方法是有前途的,前提是您可以将预先初始化的子模块repo安装到单独的路径中,并使用npm link
引用正确的文件夹,同时仍然在/var/www/html
中。