我希望将环境变量传递给文本文件。
用例:
我正在从Dockerfile构建一个docker映像,并运行一个使用文本文件的java命令。该文本文件包含一些关键字,我希望使用环境变量传递这些关键字。
DockerFile:
FROM openjdk:8u151-jdk-alpine3.7
WORKDIR /sink
COPY kafka-connect-cli-1.0.6-all.jar /sink
COPY cassandra-sink-distributed-orders.properties /sink
CMD ["sh", "-c", "java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-casb < cassandra-sink-distributed-orders.properties"]cassandra-sink-distributed-orders.properties是文本文件。
Cassandra-sink-distributed-orders.properties:
name=cassandra-sink-casb
connector.class=com.datamountaineer.streamreactor.connect.cassandra.sink.CassandraSinkConnector
tasks.max=1
topics=topic1
connect.cassandra.kcql=INSERT INTO table1 SELECT * FROM topic1;
connect.cassandra.port=9042
connect.cassandra.key.space=casb
connect.cassandra.contact.points=cassandra
connect.cassandra.username=cassandra
connect.cassandra.password=cassandra在这个文本文件中,我希望使用环境变量传递connect.cassandra.username、connect.cassandra.password和connect.cassandra.key.space。
,这是我的停靠-撰写文件:
cassandra-sink:
container_name: cassandra-sink
image: casb-cassandra-sink:0.1
#build:
# context: ./cassandra-sink
# dockerfile: Dockerfile
depends_on:
cassandra:
condition: service_healthy
depends_on:
kafka-connect:
condition: service_healthy
links:
- kafka
- kafka-connect
- cassandra
environment:
- KAFKA_CONNECT_REST=http://kafka-connect:8083发布于 2018-03-07 06:27:07
您需要定义文本文件的文件格式。您可能决定使用一些现有的格式,如JSON或YAML等.或者自己发明一个。在后一种情况下,您应该记录您的文件格式,也许使用EBNF表示法。您还将记录与该格式相关的语义学 (至少用英语)。
一旦定义了文件格式,就需要解析它。有一些标准的解析技术,特别是递归下降分析器 (如果您使用现有格式(如JSON,您会发现许多现有的库处理它)。
我希望将环境变量传递给文本文件。
严格地说,这没有任何意义。文本文件只是解析为文本的字节序列。您可以将环境变量传递给程序(而不是文件)。
也许您可以使用shell脚本编写一些这里的文件,在脚本中生成文本文件(或者将它提供给您的程序在stdin上),并在Dockerfile的CMD行中运行该shell脚本。
也许您的解析器有一些约定来处理一些符号,作为获取一些环境变量的意义。为此,您将使用getenv(3) (或编程语言中的任何等效项)。
您需要熟悉基本的解析概念和技术。所以读一本好的“编译器书”,比如龙书。
您还可以考虑在程序中嵌入一个解释器(查看Java脚本语言)。
发布于 2018-03-07 09:12:53
您可以将环境变量放入属性文件中,但是linux不会自动将它们识别为环境变量,因此不会解析它们。
root@ubuntu:/home# cat a.properties
abc=$abc
xyz=$xyz为了做到这一点,您必须解析这些值。
如果env变量尚未定义,只需执行导出即可。
root@ubuntu:/home# export abc=1234
root@ubuntu:/home# export xyz=5678现在,使用以下命令替换属性文件中的env变量,并将其保存为另一个属性文件,并解析env变量。
root@ubuntu:/home# envsubst < a.properties > b.properties您可以在b.properties文件中看到您的结果:
root@ubuntu:/home# cat b.properties
abc=1234
xyz=5678发布于 2018-03-07 06:40:39
您可以为上述属性文件创建一个".env“文件,并将其传递到您的停靠器组合文件中,如下所示:
web:
env_file:
- properties.envhttps://stackoverflow.com/questions/49145406
复制相似问题