如何从docker-compose config生成的文件中删除绝对路径?

时间:2020-05-29 09:53:42

标签: docker docker-compose yaml

我有很多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绕过那些绝对路径?

1 个答案:

答案 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

参考:-https://docs.docker.com/compose/reference/overview/

请在上面的链接中检查--project-directory

相关问题