我正在嘗試使用 mongodb 后端 dockerize 一個 spring boot web 應用程式。我運行 mongo 并使用以下命令將其映射到主機:
docker run -p27017:27017 --name my-mongodb-container -d mongo:latest
我已經用 spring 啟動代碼構建了一個 jar 并且能夠成功運行它。它插入并列印一些資料。現在我使用以下 Dockerfile 對這個 jar 進行 dockerize
FROM adoptopenjdk/openjdk11
EXPOSE 8080
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
我將 docker 容器運行為:
docker run -p 4444:8080 --name mydoctest --link my-mongodb-container doc40
實體出現,嘗試連接到 mongo 失敗。但是該應用程式被加載,因為我有另一個可以正常運行的 url。但是,它只回傳硬編碼資料。
我在控制臺中看到的錯誤
2021-09-23 17:13:02.725 INFO 1 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {
hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2021-09-23 17:13:02.824 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread whi
le connecting to server localhost:27017
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-cor
e-4.2.3.jar!/:na]
任何輸入都非常有用
uj5u.com熱心網友回復:
問題開始于你的connectionString to mongoDb 和容器的架構
您正在嘗試從 java 容器連接到 localhost:27017。在 java 容器中,Mongo 沒有運行。而是在另一個容器中運行。您必須將連接字串更改為指向my-mongodb-container:27017
我建議使用 docker 網路而不是 --link,因為它已被棄用 https://docs.docker.com/network/links/
我會給你一個簡單的例子
docker network create -d brigde app-network
docker run -p27017:27017 --name my-mongodb-container -d mongo:latest
docker network connect app-network my-mongodb-container
docker run -p 4444:8080 --name mydoctest doc40
docker network connect app-network mydoctest
(我沒有測驗過,如果有錯誤請告訴我)
取決于您使用的 Mongo 驅動程式,您必須設定 2 個不同的變數來更改Spring Boot 中所述的連接字串以及如何配置與 MongoDB 的連接詳細資訊?
spring.data.mongodb.uri=mongodb://user:[email protected]:12345
spring.data.mongodb.host=127.0.0.1
所以你可以分別使用創建容器
docker run -p 4444:8080 --name mydoctest -e SPRING_DATA_MONGODB_URI=mongodb://my-mongodb-container:27017 doc40
or
docker run -p 4444:8080 --name mydoctest -e SPRING_DATA_MONGODB_HOST=my-mongodb-container doc40
uj5u.com熱心網友回復:
終于讓它作業了。
我所做的唯一更改是在啟動時將實體連接到首選 n/w。
docker run -p27017:27017 --name my-mongodb-container --network=app-network -d mongo:latest
docker run -p 4444:8080 --name mydoctest --network=app-network -e SPRING_DATA_MONGODB_URI=mongodb://my-mongodb-container:27017/test doc40
我試圖運行容器,然后將其添加到 an/w。
uj5u.com熱心網友回復:
你的 Docker 主機的 IP 地址是什么?
您的應用嘗試使用localhost連接到 Mongo 。根據您使用的 Docker 安裝(考慮到這個問題,我假設 Docker 工具箱),本地主機將無法作業。您可以嘗試使用 Docker 主機的 IP 地址而不是localhost。大多數情況下,IP 是192.168.99.100,但也可能是其他內容。
您可以通過使用 Docker 命令列執行docker-machine ip來查找地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/312478.html
