У меня есть тонна docker файлов. Некоторые из них определяют мои микросервисы, некоторые определяют элементы инфраструктуры, такие как db, шина сообщений и т. Д. c. Мне нужно объединить их все в один большой файл docker -compose.yml, чтобы я мог легко запустить его через мой конвейер CI / CD. Я написал этот сценарий оболочки для этого, но похоже, что команда docker-compose config
создает файл с абсолютными путями:
#!/bin/bash
ymls=`ls **/docker-compose.*.yml`
compose_string=""
for file in $ymls
do
compose_string="${compose_string} -f ${file} --project-directory ."
done
echo $compose_string
docker-compose $compose_string config > docker-compose.merged.yml
Это дает мне содержимое файла ниже (сокращено для краткости):
services:
curator-services:
build:
args:
ELASTIC_PASSWORD: them-pass
context: E:\repos\them-project\devops\curator
manager-acl-app:
build:
context: E:\repos\them-project
dockerfile: services/ThemProject.Services.ManagerAcl/Dockerfile
Теперь простым решением было бы просто запустить регулярное выражение или что-то еще и заменить все, что находится в той же строке, что и слово context
. Проблема с этим подходом заключается в том, что я храню свои инфраструктурные определения в другой папке, чем мои Dockerfiles микросервисов, поэтому context
для части curator-services должно быть context: curator/
, а для приложения manager-acl-app должно быть context: ../
. Есть ли способ обойти эти абсолютные пути с помощью docker-compose config
?