[英]How to connect to specific local MongoDB instance in Spring Boot Dockerised application?
我開發了簡單的Spring Boot 應用程序,它使用MongoDB作為數據庫執行CRUD操作。 我已經在Docker 中部署了該應用程序,但是在對存儲在 MongoDB 中的任何項目執行GET 請求時,我得到了空值。 下面提供了 Docker 所需的一些文件:
Dockerfile:
VOLUME /tmp
ADD build/libs/Spring-Boot-MongoDB-0.0.1-SNAPSHOT.jar SpringMongoApp.jar
ENTRYPOINT ["java", "-Dspring.data.mongodb.uri=mongodb://mongo:27018/otp","-jar","/SpringMongoApp.jar"]
docker-compose.yml:
version: "3"
services:
api-database:
image: mongo:3.2.4
container_name: "springboot-mongo-app"
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_DATABASE: otp
networks:
- test-network
api:
image: springboot-api
ports:
- "8080:8080"
depends_on:
- api-database
networks:
- test-network
networks:
test-network:
driver: bridge
應用程序屬性:
spring.data.mongodb.host=api-database
當我使用容器 ID 檢查MongoDb Docker 容器時,它會自動連接到測試數據庫,但不會連接到我在docker-compose.yml文件的環境部分中提到的otp數據庫。
問題是你的 docker 容器不是持久化的,每次運行你的 docker 容器時,數據庫都會被刪除並重新創建。
如果您將VOLUME
添加到 persist /data/db
,您將獲得所需的結果。
我假設您在存儲
docker-compose.yml
的同一位置有目錄data/db
。 您可以設置自定義目錄(即/tmp/data/db
)
試試這個:
docker-compose.yml:
version: "3"
services:
api-database:
image: mongo:3.2.4
container_name: "springboot-mongo-app"
ports:
- "27018:27017"
volumes:
- "./data/db:/data/db"
environment:
MONGO_INITDB_ROOT_DATABASE: otp
networks:
- test-network
api:
image: springboot-api
ports:
- "8080:8080"
depends_on:
- api-database
networks:
- test-network
networks:
test-network:
driver: bridge
注意:第一次,它將是空數據庫。 如果您創建集合、插入記錄等...它將保存在./data/db
我想,而不是MONGO_INITDB_ROOT_DATABASE
你應該使用MONGO_INITDB_DATABASE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.