docker-compose.yml传递arg从文件内容构建

时间:2019-06-19 14:39:35

标签: bash docker docker-compose

我想读取环境变量指定的文件的内容,并将其作为生成arg传递给docker-compose。
因此,在我的 Dockerfile 中,我可以这样做:

ARG MY_FILE
RUN echo "$MY_FILE" > /my-file

这很完美:

docker-compose -f ./docker-compose.yml build --build-arg MY_FILE="$(cat $PATH_TO_MY_FILE)"

但是,如果我尝试在 docker-compose.yml 中执行此操作,

    build:
      context: .
      args:
        - MY_FILE="$(cat $PATH_TO_MY_FILE)"

由于以下错误而失败:

ERROR: Invalid interpolation format for "build" option in service "my-service": "MY_FILE="$(cat $PATH_TO_MY_FILE)""

任何想法我必须如何构造此字符串才能具有相同的效果?我尝试了$$等,但似乎没有用...

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

Docker compose不支持此功能,因此您仅需使用一种解决方法。这要么意味着要预处理合成文件,要么意味着要通过读取yaml来生成您运行的命令,然后通过在bash中生成命令来进行内插

您可以使用类似yq的东西,并从docker-compose.yml解析参数并生成命令。但老实说,您现在正在做的事情既简单又有效。

答案 1 :(得分:0)

在Docker服务3中,您现在可以执行此操作。

web:
  image: xxxx
  env_file:
    - web-variables.env

如果您使用docker-compose -f FILE指定了Compose文件,则env_file中的路径是相对于该文件所在目录的。