如何解决如何将自定义环境变量添加到docker-ejabberd
我正在ECS上运行docker-ejabberd,并且一切正常。现在,我想用运行容器时传递给映像的环境变量替换ejabberd.yml
文件上存在的my_sql用户/传递。即使在docker-ejabberd Wiki上,也没有关于如何简单地进行描述的明确方法。有人遇到类似的情况吗?
例如在ejabberd.yml中,我有以下部分:
sql_server: ${MysqL_SERVER}
sql_database: ${MysqL_DATABASE_NAME}
sql_username: ${MysqL_USERNAME}
sql_password: ${MysqL_PASSWORD}
sql_port: ${MysqL_PORT}
我想在docker run
时将这些变量作为env变量传递,然后在容器运行之前将其替换。
侧面说明:我们正在使用ECS,并将变量通过任务定义传递而没有任何问题。
我遍历了一些主题,建议使用ENTRY_POINT命令运行脚本来替换文件,然后再运行容器,但不确定这是否是个好主意。
我还有一个想法,就是在构建映像之前以及在从git存储库获取代码并在AWS ECR上创建映像之前,替换CICD管道中此ejabberd.yml
文件中的变量吗?
解决方法
我想用运行容器时传递给映像的环境变量替换ejabberd.yml文件中存在的my_sql用户/口令。
ejabberd.yml文件由yconf库(https://github.com/processone/yconf)读取和解析,我怀疑它是否支持这种东西。
我遍历了一些主题,建议使用ENTRY_POINT命令运行脚本来替换文件,然后再运行容器,但不确定这是否是个好主意。
按照该建议,如果您不想弄乱整个ejabberd.yml并让脚本对其进行操作,则可以确保仅对那些特定选项进行了参数设置:
您可以使用脚本在一个小文件中定义这些var,然后使用以下命令将该小文件中的选项包括到ejabberd.yml中 https://docs.ejabberd.im/admin/configuration/file-format/#include-additional-files
例如,在您的ejabberd.yml中,输入以下内容:
include_config_file:
/etc/ejabberd/database.yml:
allow_only: [sql_server,sql_database,sql_username,sql_password,sql_port]
然后编写您的脚本,该脚本会生成该小文件,例如:
$ generate-database-config.sh
$ cat /etc/ejabberd/database.yml
sql_server: "localhost"
sql_database: "ejaup"
sql_username: "ejabberd_test"
sql_password: "ejabberd_test"
sql_port: 3306
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。