Bash 从文件中读取env变量并输出到另一个文件中

Bash 从文件中读取env变量并输出到另一个文件中,bash,docker,Bash,Docker,这个问题在某种程度上与docker有关,但我想它实际上更适合bash专家 我试图将位于/run/secrets/password的docker secret文件的内容读取到一个环境变量中,然后将其与一些其他内容一起输出到另一个文件中 这是docker compose entrypoint指令,我目前只需要将一些内容写入/opt/bitnami/redis/etc/sentinel.conf文件: 入口点:| bash-c'bash-s不要试图将复杂的入口点脚本写入docker compose.y

这个问题在某种程度上与docker有关,但我想它实际上更适合bash专家

我试图将位于
/run/secrets/password
docker secret
文件的内容读取到一个环境变量中,然后将其与一些其他内容一起输出到另一个文件中

这是docker compose entrypoint指令,我目前只需要将一些内容写入
/opt/bitnami/redis/etc/sentinel.conf
文件:

入口点:|

bash-c'bash-s不要试图将复杂的入口点脚本写入
docker compose.yml
文件。特别是,如果要在
sh-c
调用中嵌入
sh-c
,那么现在正是重构的好时机

我在Docker图像中加入了很多这样的部分。例如,您可以创建模板配置文件:

#sentinel.conf.tmpl
端口16379
总监/高级管理人员
sentinel监视器主节点主节点6379 2
sentinel在毫秒后关闭主节点5000
sentinel并行同步主节点1
sentinel故障转移超时主节点5000
sentinel auth pass主节点$PASSWORD
假设您有可用的(基于Ubuntu的图像可能会;基于Alpine的图像可能不会),您可以创建一个简单的包装器脚本,获取密码,重写配置文件,然后运行主容器命令:

#/垃圾箱/垃圾箱
#entrypoint.sh
set-e
#检索密码
导出密码=$(cat/run/secrets/PASSWORD)
#重写配置文件
环境替代物\
/opt/bitnami/redis/etc/sentinel.conf
#运行主容器命令
执行官“$@”
在Dockerfile中,您可以将这些部分缝合在一起

COPY sentinel.conf.tmpl/opt/bitnami/redis/etc/
复制entrypoint.sh/
运行chmod+x/entrypoint.sh
入口点[“/ENTRYPOINT.sh”]
CMD[“redis sentinel”,“/opt/bitnami/redis/etc/sentinel.conf”]

而且您根本不会覆盖
docker compose.yml中的
入口点:
命令:

包括a,这太宽了为什么太宽了?问题非常具体:如何使用bash-herdoc从文件导出环境变量并将其写入单个bash脚本中的另一个文件?我很想包括一个例子,但我不知道如何做。你可能是对的,虽然脚本在没有变量替换的情况下工作,我喜欢不必构建额外图像的简单性,但可以使用默认图像和通过docker compose提供的自定义入口点。无论如何,我真的很感激你的回答,所以非常感谢,因为如果我找不到我原来问题的答案,我可能会这么做
bash: line 1: syntax error near unexpected token `('
bash: line 1: `"/bin/bash" -c "export PASSWORD="(<"/run/secrets/password")""'