Я пытаюсь создать суперпроект git, который содержит подмодули и файл docker-compose.yml
в суперпроекте для построения всех подмодулей.
Как обсуждено здесь:
https://nickjanetakis.com/blog/docker-tip-10-project-structure-with-multiple-dockerfiles-and-docker-compose
{ ссылка }
Пример структуры файла:
.
├── docker-compose.yml
├── .git
├── .gitmodules
├── module1
│ ├── Dockerfile
│ └── .git
└── module2
├── Dockerfile
└── .git
docker -compose.yml:
version: '3.4'
services:
module1:
image: module1
build:
context: ./module1
dockerfile: Dockerfile
module2:
image: module2
build:
context: ./module2
dockerfile: Dockerfile
Это также для управления окружающей средой, но это не имеет отношения к моим проблемам. Это отлично работает изначально.
Однако проблема, с которой я сталкиваюсь, заключается в том, что модуль в Dockerfile
использует git. Например, в модуле я использую:
git describe --tags || git rev-parse HEAD
для передачи версии git для встраивания в программу моего модуля. Это не работает, потому что папка .git
в моем подмодуле больше не папка, а файл со ссылкой на <superproject>/.git/modules/module1/
.
Вывод, который я получаю при попытке запустить docker-compose build
в superproject
is:
fatal: not a git repository: <IMAGE_CWD>/../.git/modules/module1
Итак, git пытается сослаться на файл, который не существует, потому что context: ./module1
установлен в docker-compose.yml
Я понятия не имею, как решить это. Я не хочу расширять контекст в моем docker-compose.yml
, потому что тогда мне придется переписать все Dockerfile
.
Я видел, как кто-то предложил сбросить git submodules
все вместе здесь:
{ ссылка }
Это кажется хакерским.
Я также пытался найти, есть ли возможность иметь папки .git
в подмодулях напрямую, в противоположность из git submodule absorbgitdirs
но ничего не нашел.
Вроде бы обычное использование, верно? Есть ли этому решение? Любая помощь будет оценена.