我有很多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之外的另一个文件夹中,因此策展人服务部分的context
应该是context: curator/
,而manager-acl-app的应该是context: ../
是docker-compose config
。有没有办法用console.log
绕过那些绝对路径?
答案 0 :(得分:0)
您可以将--project-directory
选项与docker-compose config
一起使用。
将脚本更改为以下
#!/bin/bash
ymls=`ls docker-compose.*.yml`
compose_string=""
DIR_PATH="." #Change it to Project Directory or current directory
for file in $ymls
do
compose_string="${compose_string} -f ${file} --project-directory $DIR_PATH"
done
docker-compose ${compose_string} config > docker-compose.yml
请在上面的链接中检查--project-directory