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)
知道如何构造这个字符串才能达到相同的效果吗?我尝试了 $$ 等,但似乎不起作用......
感谢您的帮助 :)
Docker compose 不支持此功能,因此您只能使用解决方法。这意味着预处理 compose 文件或通过读取 yaml 并通过在 bash 中生成命令进行插值来生成您运行的命令
您可以使用类似的东西yq并解析其中的参数docker-compose.yml并生成命令。但老实说,你现在所做的事情既简单又有效。