【发布时间】:2020-05-29 09:53:42
【问题描述】:
我有大量的 docker-compose 文件。一些定义我的微服务,一些定义基础设施部分,如数据库、消息总线等。我需要将它们全部合并到一个大的 docker-compose.yml 文件中,以便我可以通过我的 CI/CD 管道轻松运行它。我为此编写了这个 shell 脚本,但似乎 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 在同一行中的任何内容。这种方法的问题在于,我将基础设施定义保存在我的微服务 Dockerfile 之外的另一个文件夹中,因此 curator-services 部分的 context 应该是 context: curator/ ,对于 manager-acl-app 应该是 context: ../ .有没有办法使用docker-compose config 绕过这些绝对路径?
【问题讨论】:
标签: docker docker-compose yaml