我正在构建一个具有多项不同服务的应用程序。我正在使用docker和docker-compose来构建所有服务。但是,我需要在服务之间共享一些代码,尤其是ORM代码。我的问题是,当我尝试致电git submodule update --init
时,出现以下错误:
Step 6/8 : RUN git submodule update --init
---> Running in 88e2dcfa5b36
fatal: Not a git repository: ../.git/modules/my-repo
ERROR: Service 'my-repo' failed to build: The command '/bin/sh -c git submodule update --init' returned a non-zero code: 128
我不确定为什么要在../
的{{1}}目录中查找它。我敢肯定我正确设置了.git
。这是我的整个WORKDIR
Dockerfile
也要注意-子模块是一个私有存储库,我如何使用SSH克隆它?我是否必须使用ssh密钥或其他内容设置docker?谢谢。
编辑:同样,每个服务都是父项目的子模块。我认为这可能就是git在FROM node
WORKDIR /usr/src/my-repo
COPY package*.json ./
RUN npm install
COPY . .
RUN git submodule update --init
RUN git submodule foreach npm install
CMD ["npm", "start"]
中查找内容的原因,但是我不确定如何解决这个问题。我的目录结构是这样的:
../git/modules/my-repo
答案 0 :(得分:1)
总结:
我有一个不使用子模块的类似设置。这只是一个建议,但对于拥有约20个开发人员的团队来说,效果很好。您可以按照以下步骤修改当前设置:
现在您拥有这样的结构
- orchestration/
- .git/
- .gitignore
- docker-compose.yaml
- service1/
- .git/
- Dockerfile
- package.json
- ...
- service2/
- .git/
- Dockerfile
- package.json
- ...
- service3/
- .git/
- Dockerfile
- package.json
- ...
您的docker-compose.yaml
如下所示:
version: '3'
services:
service1:
build: ./service1
service2:
build: ./service2
service3:
build: ./service3
为每个服务提供orm代码:
当您现在调用docker-compose up
时,docker compose应该构建每个项目并启动它。如果任何服务需要访问其他服务,则该服务的URL只是docker-compose文件中提供的名称。例如。 service1要访问service2,则URL为http://serive1/path
您不必启动所有服务,可以根据需要启动它们,例如docker-compose up service1 service3
。
要重建服务(例如,代码更改时),请调用:docker-compose restart service1