内部服务器错误 500,在 Docker 中访问 Spring 引导端点时

Posted

技术标签:

【中文标题】内部服务器错误 500,在 Docker 中访问 Spring 引导端点时【英文标题】:Internal Server Error 500, when accessing Spring boot endpoint in Docker 【发布时间】:2021-10-31 19:22:52 【问题描述】:

我正在尝试学习使用 Docker 部署应用程序。我的配置如下:

application.properties

####### Mongo Properties ###########
spring.data.mongodb.uri=mongodb://mongo/locationsdb

Dockerfile

FROM openjdk:14-alpine
ARG JAR_FILE=./target/*jar
COPY $JAR_FILE jarapp.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "jarapp.jar"]

docker-compose.yml

version: "3"

services:
  mongodb-container:
    image: mongo:latest
    container_name: "mongodb-container"
    restart: always
    ports:
      - 27017:27017
  server-container:
    image: server_side
    container_name: "server-container"
    restart: always
    ports:
      - 8080:8080
    links:
      - mongodb-container
    depends_on:
      - mongodb-container

在上述之后,我做了以下事情:

docker-compose 配置

docker-compose up --build

但我得到了以下错误:

server-container   | 2021-09-02 09:44:41.253  INFO 1 --- [localhost:27017] org.mongodb.driver.cluster               : ***Exception in monitor thread while connecting to server localhost:27017***
server-container   |
server-container   | com.mongodb.MongoSocketOpenException: **Exception opening socket**
server-container   |    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
server-container   | Caused by: java.net.ConnectException: Connection refused
server-container   |    at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
server-container   |    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:589) ~[na:na]
server-container   |    at java.base/sun.nio.ch.NiosocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
server-container   |    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
server-container   |    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]
server-container   |    at java.base/java.net.Socket.connect(Socket.java:648) ~[na:na]
server-container   |    at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.2.3.jar!/:na]
server-container   |    ... 4 common frames omitted
server-container   |
server-container   | 2021-09-02 09:44:43.395  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
server-container   | 2021-09-02 09:44:43.429  INFO 1 --- [           main] c.f.virtuallab.VirtuallabApplication     : Started VirtuallabApplication in 26.943 seconds (JVM running for 28.445)
mongodb-container  | "t":"$date":"2021-09-02T09:45:13.967+00:00","s":"I",  "c":"STORAGE",  "id":22430,   "ctx":"Checkpointer","msg":"WiredTiger message","attr":"message":"[1630575913:967258][1:0x7fef40740700], WT_SESSION.checkpoint: [WT_VERB_CHECKPOINT_PROGRESS] saving checkpoint snapshot min: 34, snapshot max: 34 snapshot count: 0, oldest timestamp: (0, 0) , meta checkpoint timestamp: (0, 0) base write gen: 1"

正如它在日志中显示的那样,有一个 Exception opening socket 问题,然后它说:server-container | 2021-09-02 09:44:43.429 INFO 1 --- [main] c.f.virtuallab.VirtuallabApplication :在 26.943 秒内启动 VirtuallabApplication(JVM 运行 28.445) 之后。

当我尝试我的终点时:localhost:8080/api/v1/locations 我只收到 Internal Server Error (500)

有人可以指导我如何正确连接 mongodb 并启动应用程序吗?

【问题讨论】:

这能回答你的问题吗? From inside of a Docker container, how do I connect to the localhost of the machine? 【参考方案1】:

尝试改变

####### Mongo Properties ###########
spring.data.mongodb.uri=mongodb://mongodb-container/locationsdb

您正在使用mongo 作为您的mongodb 主机,但您已在docker-compose 文件中将mongodb 容器声明为mongodb-container。所以你的mongodb实例应该被mongodb-container而不是mongo访问。

【讨论】:

我仍然遇到同样的问题...会不会是 mongo 和 jdk 版本的结果? 您还有其他属性文件吗?像 application-docker.properties ?你有 mongodb uri 吗?在日志中我看到,server_side 试图连接到 localhost。 没有。我只有 application.properties 文件,现在的内容是:spring.data.mongodb.uri=mongodb://mongodb-container/locationsdb。所以 localhost:27017 来自哪里我不知道。我什至卸载了本地安装的 mongodb 但仍然是同样的问题。 我在卸载 Mongodb 后尝试在本地启动我的 spring-boot 应用程序时发现我得到 Exception opening socket。但是一旦我重新安装了 Mongodb,应用程序在本地运行良好。难道是docker-compose.yml没有正确安装Mongo? 我认为 spring boot 没有读取 docker 配置文件属性。您可以重新构建 docker 映像吗?你的形象可能是旧的。您还可以检查应用程序启动时spring.data.mongodb.uri 的实际值是多少?您可以添加日志以打印该值。【参考方案2】:

如果在前端已经编程,我认为不需要向主机公开 mongodb 端口。但是必须提到与主机名相同的用户名和密码,我的意思是 mongodb 容器的容器名称。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于内部服务器错误 500,在 Docker 中访问 Spring 引导端点时的主要内容,如果未能解决你的问题,请参考以下文章

访问 $GITLAB/admin/runners 时出现内部服务器错误 500

从 OpenLayer 3 访问 Geoserver 得到“500(内部服务器错误)”

CakePHP + nginx 500 内部服务器错误

HttpWebResponse远程服务器返回错误: (500) 内部服务器错误 的解决办法

500.19 - 内部服务器错误 - 无法访问请求的页面,因为该页面的相关配置数据无效

尝试访问损坏的图片 url 时抛出内部服务器错误 500 而不是 404