Docker 如何在dokerized环境中将DB连接参数传递给KeyClope

Docker 如何在dokerized环境中将DB连接参数传递给KeyClope,docker,keycloak,Docker,Keycloak,我正在使用运行在Docker容器中的KeyClope服务器 我开发了一个用户存储提供程序来连接到客户端数据库,以搜索用户信息和登录验证 我在代码中编写了DB连接属性,但现在是时候正确地执行了,比如在Docker容器启动时向其提供该信息,并从代码中获取该信息 我猜我的UserStorageProviderFactory的init(Config.Scope Config)方法就是查找这些参数的地方。在那里,config参数包含文件standalone.xml中的信息,但我需要在启动时将连接参数传递给

我正在使用运行在Docker容器中的KeyClope服务器

我开发了一个用户存储提供程序来连接到客户端数据库,以搜索用户信息和登录验证

我在代码中编写了DB连接属性,但现在是时候正确地执行了,比如在Docker容器启动时向其提供该信息,并从代码中获取该信息

我猜我的UserStorageProviderFactory的
init(Config.Scope Config)
方法就是查找这些参数的地方。在那里,
config
参数包含文件
standalone.xml
中的信息,但我需要在启动时将连接参数传递给Docker,以便轻松修改


如何以这种方式获得它?

Docker容器必须使用
-e
选项运行,如:

-e ENV_VAR_1=env_var_value1
它可以根据需要包含尽可能多的-e选项。另一种方法是使用
--env file
选项附加文件中包含的变量

然后,在用户存储提供程序代码中,可以检查环境变量的值,如:

System.getenv("ENV_VAR_1")

您可以使用jboss cli脚本将UserStorageProvider添加到standalone/-ha.xml,其属性可以由传递到容器的环境变量设置

示例:

假设我们有一个包含以下内容的spi.cli脚本:

/subsystem=keycloak-server/spi=my-spi/provider=my-custom-auth-provider:add(enabled=true,properties={"my.custom.property", "${env.MY_ENV:myDefaultValue}"})
这可以放在容器中的
/opt/jboss/startup scripts
文件夹中,以便在启动时自动运行,请参阅

运行时,它将在单机版中生成以下内容: