如何解决作为环境文件传递给Docker运行命令时,$ cat文件命令不起作用
我有一个很大的文件,需要将它作为环境变量传递给linux ec2平台中的Docker run命令。
我理想的docker命令如下:
docker run -p 6080:9000 -e KAFKA_BROKERCONNECT=url:port -e KAFKA_TRUSTSTORE="$(cat directory/kafka.client.truststore.jks | base64)" -e KAFKA_KEYSTORE="$(cat directory/kafka.client.keystore.jks | base64)" -e KAFKA_PROPERTIES="$(cat directory/kafka.properties | base64)" -e SERVER_SERVLET_CONTEXTPATH="/" -d obsidiandynamics/kafdrop
我得到/ bin / docker:参数列表太长
因此,我没有执行上述操作,而是从文件中传递了所有Env变量 kafdrop-properties文件如下所示:
KAFKA_BROKERCONNECT=host:port
KAFKA_TRUSTSTORE="$(cat 2kafka.client.truststore.jks)"
KAFKA_KEYSTORE="$(cat 2kafka.client.keystore.jks)"
KAFKA_PROPERTIES="$(cat /home/de601928/kafka/kafka.properties | base64)
和相应的Docker运行命令:
docker run -p 6080:9000 --env-file kafdrop-properties -d obsidiandynamics/kafdrop
现在,在我运行命令之后,我仍然看到环境变量(如KAFKA_TRUSTSTORE)没有通过cat内容读取,并在我运行docker exec env时按原样显示
为什么cat命令不会从文件中读取文件并将其值作为环境变量参数传递。
我尝试了不同的方式,例如给“
解决方法
之所以发生这种情况,是因为docker使用简化的机制来解析.env文件,如here所述。仅在直接引用变量时才解析变量,并且不支持命令。
编辑:
使用docker-compose这样的东西应该可以工作:
您的docker-compose.yml
文件
version: '3'
services:
my-service:
image: obsidiandynamics/kafdrop
environment:
- KAFKA_BROKERCONNECT
- KAFKA_TRUSTSTORE
- KAFKA_KEYSTORE
- KAFKA_PROPERTIES
ports:
- 6080:9000
然后运行
eval $(egrep -v '^#' .env | xargs) && docker-compose up
应该发生的是,命令的第一部分将解析文件并设置变量,然后在评估这些变量的同时运行docker-compose命令。
现在,通过像上面一样设置docker-compose.yml的环境部分,这些特定的变量将从外壳传递到容器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。