Docker容器中Quarkus运行时动态设置OpenAPI服务器地址
解决Quarkus OpenAPI服务器地址绑定Docker容器HOSTNAME的问题
方法一:利用Quarkus属性占位符直接绑定环境变量
Quarkus支持在配置文件中直接引用系统/环境变量,无需修改Dockerfile。只需在application.properties(或application.yml)中添加如下配置:
quarkus.smallrye-openapi.servers=http://${HOSTNAME:localhost}:8080
其中:localhost是备选默认值,当容器内HOSTNAME变量不存在时会自动 fallback 到该值。容器启动后,Quarkus会自动读取环境变量并替换占位符,将OpenAPI的服务器地址设置为容器主机名。
方法二:通过Dockerfile配置启动参数
如果不想修改应用配置文件,可在Dockerfile中通过启动命令传递参数,让Quarkus运行时读取容器的HOSTNAME变量:
# 使用shell形式的CMD,让容器运行时自动展开HOSTNAME变量 CMD java -jar /path/to/your-quarkus-app.jar -Dquarkus.smallrye-openapi.servers=http://$HOSTNAME:8080
注意:不要用Docker的ENV指令绑定HOSTNAME,因为ENV是构建阶段的变量,无法获取容器运行时的主机名。必须用shell形式的启动命令,依赖shell环境展开$HOSTNAME。
优先级说明
Quarkus的配置优先级为:命令行传递的-D参数 > 配置文件中的占位符配置。如果同时使用两种方式,命令行参数会覆盖配置文件的设置。
内容的提问来源于stack exchange,提问作者tomasz-mer
相关产品推荐
相关产品推荐

