Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash docker-compose.yml传递参数以根据文件内容生成_Bash_Docker_Docker Compose - Fatal编程技术网

Bash docker-compose.yml传递参数以根据文件内容生成

Bash docker-compose.yml传递参数以根据文件内容生成,bash,docker,docker-compose,Bash,Docker,Docker Compose,我想读取环境变量指定的文件内容,并将其作为构建参数传递给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中这样做: 它失败,

我想读取环境变量指定的文件内容,并将其作为构建参数传递给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中这样做:

它失败,出现以下错误:

ERROR: Invalid interpolation format for "build" option in service "my-service": "MY_FILE="$(cat $PATH_TO_MY_FILE)""
你知道我该如何构造这个字符串才能达到同样的效果吗?我尝试了$$等,但似乎不起作用


感谢您的帮助:)

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


您可以使用类似于
yq
的方法,从
docker compose.yml
解析参数并生成命令。但老实说,您现在所做的是简单而有效的。

在docker service 3中,您现在就可以做到这一点

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

如果您使用
docker Compose-f file
指定了一个Compose文件,那么env_文件中的路径是相对于该文件所在的目录的。

在调用
docker Compose
之前,您必须先进行一些预处理,无论如何都无法避免。在命令行中执行此操作,如果我不想在docker-compose.yml中执行此操作,则它会破坏docker compose不支持此操作,因此您只能使用变通方法。这将意味着预处理compose文件,或者通过读取yaml并通过在bashCool中生成命令来生成您运行的命令,谢谢。如果你把这个作为答案,我可以接受:)
web:
  image: xxxx
  env_file:
    - web-variables.env