无法使用 Spring 数据源参数运行 docker 容器
Posted
技术标签:
【中文标题】无法使用 Spring 数据源参数运行 docker 容器【英文标题】:Unable to run docker container with Spring data source arguments 【发布时间】:2022-01-12 05:20:42 【问题描述】:我想运行一个带有一些数据源参数的 Docker 容器,就像我在终端上使用 Spring 数据源参数运行 Spring Boot 应用程序一样。例如:
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
和上述单个参数,但它不起作用。
我不想在 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"]
很高兴在这方面得到一些帮助。 谢谢!
【问题讨论】:
【参考方案1】:您可以specify Spring properties as environment variables,尤其是在容器设置中,这比尝试将它们作为命令行参数传递要容易得多。
您可以在单个 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
【讨论】:
【参考方案2】:一个好的做法是使用包含这些配置属性(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
【讨论】:
以上是关于无法使用 Spring 数据源参数运行 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Spring Tool Suite maven JVM 进程将 java 图标放在 Mac 的 Dock 上?