内部服务器错误500,访问Spring启动端点在Docker



我想学习应用程序部署与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"}}

如日志所示,There was aException open socket服务器容器| 20121-09-02 09:44:43.429 INFO 1—[main] c.f.virtuallab.VirtuallabApplication: Started VirtuallabApplication in 26.943秒(JVM运行28.445)后来。

当我尝试我的结束点:localhost:8080/api/v1/locations我只得到内部服务器错误(500).

有人能指导我如何正确连接mongodb然后启动应用程序?

尝试更改

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

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

我认为没有必要暴露mongodb端口主机如果在前端它已经编程。但必须提到相同的用户名&密码和主机名我指的是mongodb的容器名。

最新更新