當我構建我的 docker 鏡像并運行它時,它會給出這個和錯誤,但是如果我運行 jar 檔案,一切運行正常,如果我猜它與我的 docer-compose.yml 檔案有關,但是 idk
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.2.3.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.2.3.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.2.3.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar!/:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.2.3.jar!/:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.2.3.jar!/:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.2.3.jar!/:na]
... 4 common frames omitted
檔案
FROM openjdk:17
ADD target/docker-document-rest-api.jar docker-document-rest-api.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "docker-document-rest-api.jar"]
應用程式屬性
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=example
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
docer-compose.yml
version: "3.8"
services:
mongodb:
image: mongo
container_name: mongodb
ports:
- 27017:27017
volumes:
- data:/data
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
- ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
data: {}
networks:
default:
name: mongodb_network
uj5u.com熱心網友回復:
默認情況下,docker 容器使用bridge網路,因此您無法localhost從容器連接。有幾種方法可以解決這個問題,一種方法是將運行 Java 應用程式的容器連接到放置 MongoDB 的網路。
由于docker-compose您明確指定了網路名稱 ( mongodb_network),我們可以執行以下操作:
- 在屬性檔案中,我們必須更改
localhost為mongodb,因此:
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=example
spring.data.mongodb.port=27017
spring.data.mongodb.host=mongodb
這樣做的原因是可以使用容器的名稱,就hostname好像我們連接到放置容器的網路一樣。
- 為 Java 應用程式重建 docker 鏡像,運行它:
docker run --network=mongodb_network -p 8080:8080 <docker-image-name>
(在那里填寫您的 docker 鏡像名稱)
雖然這些步驟可能有效,但我建議將您的應用程式添加到docker-compose:
version: "3.8"
services:
mongodb:
image: mongo
container_name: mongodb
expose:
- 27017
ports:
- 27017:27017
volumes:
- data:/data
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
- ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
- ME_CONFIG_MONGODB_SERVER=mongodb
spring_application:
build: .
container_name: spring_application
ports:
- 8080:8080
depends_on:
mongodb:
condition: service_started
volumes:
data: {}
networks:
default:
name: mongodb_network
這必須首先構建docker-compose build,然后可以使用docker-compose up.
uj5u.com熱心網友回復:
您必須使用 docker 內部主機網路來連接 mongodb。因此,從您的 dockerized 應用程式中,您必須使用服務名稱(因為這是主機名)而不是與 localhost 連接。在您的情況下:http://mongodb:27017是您的 mongo db 容器的服務(以及主機名)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357799.html
