我想像在带有Spring数据源参数的终端上运行Spring Boot应用程序一样,运行带有一些数据源自变量的Docker容器。例如:
java -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/ -jar target/LatestBuild/ecom-0.0.1-SNAPSHOT.jar --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
我已经尝试过docker run --env
和上面的单个args,但它不起作用。
我不想在application.properties文件中传递这些参数。
Docker文件:
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}
CMD ["java", "-jar", "ecom-0.0.1-SNAPSHOT.jar"]
很乐意在这方面得到一些帮助。谢谢
您可以将Spring属性指定为环境变量,尤其是在容器设置中,这比将它们作为命令行参数传递要容易得多。
在单个docker run
命令中,您可以编写
docker run
-e SERVER_PORT=8999
-e LOGGING_ORG_HIBERNATE_SQL=DEBUG
...
-e SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE=10
myimage
考虑到设置的数量,您可能会发现将它们放在一个专用文件中更方便,您可以将其传递给docker run --env-file
选项。
docker run
-d
-p 8999:8999
--name myapp
--env-file spring.env
myimage
一个好的做法是使用一个包含这些配置属性(application.properties(的配置文件
你可以使用这样的Docker文件:
FROM openjdk:11
VOLUME /conf
ADD application.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar --spring.config.location=file:/conf/" ]
EXPOSE 80
EXPOSE 81
在/conf卷中,您应该复制application.properties