我正在构建一个具有几种不同服务的应用程序。我正在使用 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
Run Code Online (Sandbox Code Playgroud)
我不确定它为什么要查找../
目录.git
。我很确定我设置WORKDIR
正确。这是我的全部Dockerfile
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"]
Run Code Online (Sandbox Code Playgroud)
另外作为旁注 - 子模块是一个私有存储库,我如何使用 SSH 克隆它?我必须使用 ssh 密钥或其他东西来设置 docker 吗?谢谢。
编辑:此外,每个服务都是父项目的子模块。我认为这可能就是 git 正在寻找的原因../git/modules/my-repo
,但我不太确定如何解决这个问题。我的目录结构是这样的:
parent-repo
--service-1
----orm
--service-2
----orm
Run Code Online (Sandbox Code Playgroud)
总结一下:
我有一个类似的设置,但没有使用子模块。这只是一个建议,但对于拥有大约 20 名开发人员的团队来说效果非常好。您可以通过以下步骤修改当前设置:
现在你有这样的结构
- orchestration/
- .git/
- .gitignore
- docker-compose.yaml
- service1/
- .git/
- Dockerfile
- package.json
- ...
- service2/
- .git/
- Dockerfile
- package.json
- ...
- service3/
- .git/
- Dockerfile
- package.json
- ...
Run Code Online (Sandbox Code Playgroud)
你的docker-compose.yaml
样子是这样的:
version: '3'
services:
service1:
build: ./service1
service2:
build: ./service2
service3:
build: ./service3
Run Code Online (Sandbox Code Playgroud)
为每个服务提供 orm 代码:
当您现在调用docker-compose up
docker compose 时,应该构建每个项目并启动它。如果任何服务需要访问另一个服务,则该服务的 url 只是 docker-compose 文件中提供的名称。例如service1想要访问service2那么url是http://serive1/path
您不必启动所有服务,您可以根据需要启动它们,例如docker-compose up service1 service3
。
要重建服务(例如,当代码更改时),请调用:docker-compose restart service1
归档时间: |
|
查看次数: |
15699 次 |
最近记录: |