【问题标题】:Map environment variabels in JSON with JQ inside docker使用 docker 内的 JQ 在 JSON 中映射环境变量
【发布时间】:2021-10-18 16:33:02
【问题描述】:

我已经用头撞墙了 8 个小时,但似乎无法解决这个问题。

我有一个像这样的 json:

{
 "connector.class": "com.mongodb.kafka.connect.MongoSinkConnector",
 "tasks.max": 1,
 "key.converter": "org.apache.kafka.connect.storage.StringConverter",
 "key.converter.schemas.enable": false,
 "value.converter": "io.confluent.connect.avro.AvroConverter",
 "value.converter.schema.registry.url": "CONNECTOR_SCHEMA_REGISTRY_URL",
 "value.converter.schemas.enable": true,
 "topics": "CONNECTOR_TOPICS",
 "name": "CONNECTOR_NAME",
 "connection.uri": "CONNECTOR_MONGODB_CONNECTION_URI",
 "database": "CONNECTOR_MONGODB_DATABASE_NAME",
 "collection": "CONNECTOR_MONGODB_COLLECTION_NAME",
 "max.num.retries": 1,
 "retries.defer.timeout": 5000,
 "errors.log.include.messages": true,
 "document.id.strategy": 
 "com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy",
 "document.id.strategy.overwrite.existing": true,
 "delete.on.null.values": true,
 "post.processor.chain": 
 "com.az.ip.dmdp.commons.mongodb.kafka.connect.BsonOidProcessor, 
  com.az.ip.dmdp.commons.mongodb.kafka.connect.BsonTimestampProcessor",
 "writemodel.strategy": 
 "com.mongodb.kafka.connect.sink.writemodel.strategy.UpdateOneTimestampsStrategy",
 "transforms": "hoistKeyOid, hoistKeyId",
 "transforms.hoistKeyOid.type": "org.apache.kafka.connect.transforms.HoistField$Key",
 "transforms.hoistKeyOid.field": "oid",
 "transforms.hoistKeyId.type": "org.apache.kafka.connect.transforms.HoistField$Key",
 "transforms.hoistKeyId.field": "_id"
}

我正在尝试使用 jq 替换以 CONNECTOR 开头的值。我发现了这个小技巧:https://unix.stackexchange.com/questions/657466/how-to-update-given-environment-variable-values-in-json

它工作得很好,在我的终端上做了一个小的调整。只要在我的终端中设置了变量

jq 'with_entries( .value = ($ENV."\(.value)" // .value ) )' device-connectorbody.json

但是当我在 docker 容器内执行的 bash 脚本中添加同一行时,我收到以下错误消息:

jq: error: ENV/0 is not defined at <top-level>, line 1:
with_entries( .value = ($ENV."\(.value)" // .value ) )                        
jq: 1 compile error

根据我对错误的理解,它似乎无法扩展 ENV 变量,但是为什么?!

如果有人知道我做错了什么,请帮忙。

【问题讨论】:

  • 您的容器中存在哪个版本的 jq?如果您的主机中的那个足够新,可以拥有ENV,但容器中的那个不是,那就是您的问题 - 这是一个相对较新的功能。
  • 好主意。会尽快检查。
  • 你是导出变量还是仅仅声明它们?
  • 导出。这是查尔斯指出的版本。这总是最明显的答案。很快就会更新他的答案!
  • 顺便说一句,如果您只想为一个命令导出内容,var1=value1 var2=value2 somecommand done 作为单个命令(没有换行符或其他命令分隔符)将导出 var1var2somecommand 的环境中,无需修改其他/以后命令的环境。

标签: json bash docker jq


【解决方案1】:

答案很简单。需要在 docker 中有 1.6 版本。为了能够做到这一点,我需要在安装 jq 之前安装 epel-release-latest-7.noarch.rpm。否则它会安装 1.5 版本的 jq。所以感谢查尔斯·达菲!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2016-02-20
    • 2022-11-03
    • 2023-03-23
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多