无法使用Spring数据源参数运行Docker容器问题求助
解决方案
有两种无需将参数写入application.properties的实现方式,可根据需求选择:
方案1:修改Dockerfile支持直接传入原命令行参数
该方案可以直接复用你已有的终端启动参数,无需调整参数格式。
调整后Dockerfile内容:
FROM openjdk:11.0.7-jre-slim ENV DEMO_ROOT=/root ADD /target/LatestBuild/ecom-0.0.1-SNAPSHOT.jar $DEMO_ROOT WORKDIR ${DEMO_ROOT} # 预留配置位接收JVM参数与Spring启动参数 ENV JAVA_OPTS="" ENV SPRING_ARGS="" CMD ["sh", "-c", "java $JAVA_OPTS -jar ecom-0.0.1-SNAPSHOT.jar $SPRING_ARGS"]
对应docker run启动命令:
docker run -p 8999:8999 \ --env JAVA_OPTS="-Dserver.port=8999 -Dlogging.org.hibernate.SQL=DEBUG -Dlogging.level.ROOT=DEBUG -Dlogging.level.io.github.jhipster=DEBUG -Dlogging.level.com.opti.ecom=DEBUG -Dlogging.path=/var/log/spring/ecom_v2/" \ --env SPRING_ARGS="--spring.jpa.show_sql=true --spring.profiles.active=dev,no-liquibase --spring.datasource.url=jdbc:postgresql://aws_database_url --spring.datasource.username=user --spring.datasource.password=password --spring.datasource.hikari.maximum-pool-size=10" \ <你的镜像名称>
方案2:无需修改Dockerfile,使用Spring Boot原生环境变量绑定规则
Spring Boot默认支持将大写、下划线分隔的环境变量自动映射为配置项,转换规则为:配置项中的.替换为_,-直接删除,所有字母转为大写。
你之前直接传env不生效是因为没有按照Spring Boot的环境变量命名规则传入参数,按如下格式传入即可生效:
docker run -p 8999:8999 \ --env SERVER_PORT=8999 \ --env LOGGING_ORG_HIBERNATE_SQL=DEBUG \ --env LOGGING_LEVEL_ROOT=DEBUG \ --env LOGGING_LEVEL_IO_GITHUB_JHIPSTER=DEBUG \ --env LOGGING_LEVEL_COM_OPTI_ECOM=DEBUG \ --env LOGGING_PATH=/var/log/spring/ecom_v2/ \ --env SPRING_JPA_SHOW_SQL=true \ --env SPRING_PROFILES_ACTIVE=dev,no-liquibase \ --env SPRING_DATASOURCE_URL=jdbc:postgresql://aws_database_url \ --env SPRING_DATASOURCE_USERNAME=user \ --env SPRING_DATASOURCE_PASSWORD=password \ --env SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE=10 \ <你的镜像名称>
内容的提问来源于stack exchange,提问作者test test
相关产品推荐
相关产品推荐

