有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Spring Boot Docked应用程序中连接到特定的本地MongoDB实例?

我开发了简单的Spring启动应用程序,它使用MongoDB作为数据库执行CRUD操作。我已经在Docker中部署了该应用程序,但是在对存储在MongoDB中的任何项目执行get Request时,我得到了空值。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编写。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

When I checked the MongoDb Docker container using container ID, it is automatically getting connected to test database but not to otp database which I have mentioned in environment section of docker-compose.yml file.


共 (2) 个答案

  1. # 1 楼答案

    我认为你应该使用MONGO_INITDB_DATABASE而不是MONGO_INITDB_ROOT_DATABASE

  2. # 2 楼答案

    问题是docker容器不是持久的,每次运行docker容器时,数据库都会被删除并重新创建

    如果将VOLUME添加到持久化/data/db,将获得所需的结果

    I assume your have directory data/db in the same place where you have stored docker-compose.yml. You may setup custom directory (i.e /tmp/data/db)

    试试这个:

    docker编写。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