Docker从Git repo合成构建映像

Docker从Git repo合成构建映像,git,docker,docker-compose,Git,Docker,Docker Compose,首先我要说的是,我知道这个项目结构可能并不理想,但这是上级想要的,所以我不能改变这一点 我在一个回购协议中有多个Java项目,我希望将其封装到一个容器中: - main - project1 - project2 - Dockerfile 我对此没有异议;我的问题是,我需要(公共)GitHub repo中的一些其他代码在我的项目容器中自己的容器中运行 - main-container - project1 - project2 - git-rep

首先我要说的是,我知道这个项目结构可能并不理想,但这是上级想要的,所以我不能改变这一点

我在一个回购协议中有多个Java项目,我希望将其封装到一个容器中:

- main
    - project1
    - project2
    - Dockerfile
我对此没有异议;我的问题是,我需要(公共)GitHub repo中的一些其他代码在我的项目容器中自己的容器中运行

- main-container
    - project1
    - project2
    - git-repo-container
我可以克隆存储库并将其放入容器中,不会出现任何问题(假设在以前的
RUN
命令中安装了
git
):

现在,我完全不知道如何构建和运行repo的
Dockerfile
中指定的容器

当然,我转向了
docker compose

version: "3.9"
services:
  my-image:
    build: .
    image: my-image
    ports:
      - 8080
      - 8100
  repo-image:
    build: .
    image: repo-image
    ports:
      - 8000
我是新来的
docker compose
,所以这对我来说似乎有点困惑,但我知道我可以直接从GitHub构建图像。我只是不知道如何指定repo的
Dockerfile
,因为我在构建阶段拉入了repo(并且希望避免在容器中安装docker以在该容器中运行
docker build…

我应该补充一点,我不能只是将repo的源代码添加到这个代码库中(不是我的决定),因此在构建阶段引入repo似乎是我唯一的选择


作为一个附带问题,如果允许的话,当我在开发人员容器中打开项目时,VS代码是否有原因不显示repo文件夹?

Docker支持直接从github URL构建,请参阅

docker构建[选项]路径| URL |-

因此,对于您来说,在翻译成作文后,正确的方法是下一步:

docker compose.yaml:

version: "3"
services:
  my-image:
    build: .
    image: my-image
    ports:
      - 8080
      - 8100
  repo-image:
    build: https://github.com/user/repo.git
    image: repo-image
    ports:
      - 8000

上面将基于第三方代码生成一个映像。

感谢您的帮助,我已经有所进展,但现在它显示
无法使用前端dockerfile解决问题。v0:读取dockerfile失败:加载缓存密钥失败:存储库不包含ref master,输出:“
这是因为实际回购还是我做得不对?看起来你的git回购没有主分支?您可以参考以找到完整的用法:也许
myrepo.git#mybranch
。如果仍然存在问题,请出示您的git repo。这是一个较新的存储库,它们被重命名为
master
main
,但docker告诉我它找不到
master
分支,我会在最后尝试
#main
。更新,最后它与
#main
一起工作,所以我想这是使用
main
分支而不是
master
的存储库应该遵循的过程,谢谢您的帮助!是的,看起来微软删除了旧的编码术语,但是docker没有按照设置默认值,很高兴知道这一点。
version: "3"
services:
  my-image:
    build: .
    image: my-image
    ports:
      - 8080
      - 8100
  repo-image:
    build: https://github.com/user/repo.git
    image: repo-image
    ports:
      - 8000