簡體   English   中英

如何在 Spring Boot Dockerised 應用程序中連接到特定的本地 MongoDB 實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM