运行 Spring 在 Docker 内启动应用程序时出现异常
Exception when running Spring Boot app inside of Docker
我在连接配置服务器时遇到问题。我不确定我做错了什么。我已经在端口 8888 上名为“config-server”的 docker 容器中配置了服务器 运行ning。
http://config-server:8888. Will be trying the next url if available
2020-08-10 17:38:35.196 ERROR 11052 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing
at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:148) ~[spring-cloud-config-client-2.2.3.RELEASE.jar:2.2.3.RELEASE]
发现服务器bootstrap.yml
spring:
application:
name: discovery-server
cloud:
config:
uri: http://config-server:8888
fail-fast: true
retry:
max-attempts: 20
编辑
配置服务器 Dockerfile
FROM openjdk:11.0-jre
ADD ./target/config-server-0.0.1-SNAPSHOT.jar config-server-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar", "/config-server-0.0.1-SNAPSHOT.jar"]
EXPOSE 8888
docker 运行 -p 8888:8888 --name config-server 3deb982c96fe
Discovery-server 未 运行ning docker。首先我想创建它的 .jar 文件
原问题已在评论中回答,这里回答最后一点以便更好地格式化:
每次 运行 mvn clean install
或 gradle build
时,Jar 文件都将构建在应用程序的 /target
文件夹中。为了在 Docker 中 运行 这个,你必须将 jar 文件从你的 /target
目录复制到 Docker 容器内部文件,然后 运行 它( java -jar nameOfYourJar.jar
).
您的 jar 名称可以在 maven/gradle 设置中定义,但为了让您的 Docker 文件通用,我建议遵循 Docker 文件:
FROM openjdk:11.0-jre
ARG JAR_FILE=/target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]
使用 ARG JAR_FILE
将任何 jar 文件(在目标中找到)的路径保存为 docker 中的 JAR_FILE
变量,然后您可以将其复制到 Docker将以 app.jar
.
名称存储的内部文件
ENTRYPOINT 是将在容器启动时 运行 的命令。
将 Docker 文件放在 /target
目录旁边(因此在您的应用程序的根文件夹中)并 运行 在终端中执行以下命令:
docker build -t springapp . && docker run --rm -d -p 8080:8080 springapp
希望这能澄清一切。
我在连接配置服务器时遇到问题。我不确定我做错了什么。我已经在端口 8888 上名为“config-server”的 docker 容器中配置了服务器 运行ning。
http://config-server:8888. Will be trying the next url if available
2020-08-10 17:38:35.196 ERROR 11052 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing
at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:148) ~[spring-cloud-config-client-2.2.3.RELEASE.jar:2.2.3.RELEASE]
发现服务器bootstrap.yml
spring:
application:
name: discovery-server
cloud:
config:
uri: http://config-server:8888
fail-fast: true
retry:
max-attempts: 20
编辑
配置服务器 Dockerfile
FROM openjdk:11.0-jre
ADD ./target/config-server-0.0.1-SNAPSHOT.jar config-server-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar", "/config-server-0.0.1-SNAPSHOT.jar"]
EXPOSE 8888
docker 运行 -p 8888:8888 --name config-server 3deb982c96fe
Discovery-server 未 运行ning docker。首先我想创建它的 .jar 文件
原问题已在评论中回答,这里回答最后一点以便更好地格式化:
每次 运行 mvn clean install
或 gradle build
时,Jar 文件都将构建在应用程序的 /target
文件夹中。为了在 Docker 中 运行 这个,你必须将 jar 文件从你的 /target
目录复制到 Docker 容器内部文件,然后 运行 它( java -jar nameOfYourJar.jar
).
您的 jar 名称可以在 maven/gradle 设置中定义,但为了让您的 Docker 文件通用,我建议遵循 Docker 文件:
FROM openjdk:11.0-jre
ARG JAR_FILE=/target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]
使用 ARG JAR_FILE
将任何 jar 文件(在目标中找到)的路径保存为 docker 中的 JAR_FILE
变量,然后您可以将其复制到 Docker将以 app.jar
.
ENTRYPOINT 是将在容器启动时 运行 的命令。
将 Docker 文件放在 /target
目录旁边(因此在您的应用程序的根文件夹中)并 运行 在终端中执行以下命令:
docker build -t springapp . && docker run --rm -d -p 8080:8080 springapp
希望这能澄清一切。