我想读取环境变量指定的文件的内容,并将其作为生成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)""
任何想法我必须如何构造此字符串才能具有相同的效果?我尝试了$$等,但似乎没有用...
感谢您的帮助:)
答案 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中的路径是相对于该文件所在目录的。