在docker中使用JQ映射JSON中的环境变量



我已经纠结了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变量,但为什么?!

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

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