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

Dan*_*zyk 5 bash docker docker-compose

我想读取环境变量指定的文件的内容并将其作为构建参数传递给 docker-compose。
那么在我的Dockerfile中我可以这样做:

ARG MY_FILE
RUN echo "$MY_FILE" > /my-file
Run Code Online (Sandbox Code Playgroud)

这很完美:

docker-compose -f ./docker-compose.yml build --build-arg MY_FILE="$(cat $PATH_TO_MY_FILE)"
Run Code Online (Sandbox Code Playgroud)

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

    build:
      context: .
      args:
        - MY_FILE="$(cat $PATH_TO_MY_FILE)"
Run Code Online (Sandbox Code Playgroud)

它因以下错误而失败:

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

知道如何构造这个字符串才能达到相同的效果吗?我尝试了 $$ 等,但似乎不起作用......

感谢您的帮助 :)

Tar*_*ani 1

Docker compose 不支持此功能,因此您只能使用解决方法。这意味着预处理 compose 文件或通过读取 yaml 并通过在 bash 中生成命令进行插值来生成您运行的命令

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