gpt4 book ai didi

java - 如何为 MongoDB 和 Spring Boot 将主机名定义到 docker-compose.yml

转载 作者:可可西里 更新时间:2023-11-01 10:01:38 25 4
gpt4 key购买 nike

我正在尝试使用 MongoDB 和 Spring 引导创建 docker-compose.yml。问题是我不想将任何数据库连接硬编码到 Spring 的 application.properties 中。

来自 this article我看到您可以使用预定义的主机名启动一个 mongodb 容器。据我了解,定义到 compose yml 文件中的所有服务都在同一网络中,但它们具有不同的 ips,对吗?所以主要问题是如何将 mongodb 主机名定义到 docker-compose.yml 中并将该名称用于 spring boot application.properties 文件中。

我会尽量提供尽可能多的信息,但如果有什么不清楚的地方,请告诉我。

这里是一些关于 Spring Boot 应用程序的信息。

我在 spring 项目中使用的依赖项是:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

该应用程序具有扩展 MongoRepository 的接口(interface):

import org.springframework.data.mongodb.repository.MongoRepository;

public interface ServiceLoggerRepository extends MongoRepository<ExampleEntity, String> {
}

它使用@Document 注释的实体

import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "example")
public class ExampleEntity {

@Id
private String _id;
private String name;
}

数据库连接被定义到 application.properties 文件中:

#here is the problem - this the vm ip
spring.data.mongodb.uri=mongodb://192.168.0.51
spring.data.mongodb.database=mongo-test

有关 Spring Boot 的 Dockerfile 的信息:

FROM openjdk:8-jre
COPY ./mongo-test.jar ./usr/mongo-test.jar
EXPOSE 8080
RUN sh -c 'touch /usr/mongo-test.jar'
ENTRYPOINT ["java","-jar","/usr/mongo-test.jar"]

关于 docker-compose 的信息:它有 2 个服务——MongoDB 和 Spring Boot 应用程序。

version: "3"
services:
mongodb:
restart: always
image: mongo
container_name: "mongodb-test"
ports:
- 27017:27017
command: --smallfiles
mongo-logger:
restart: always
build: ./mongo-test
container_name: "mongo-test"
ports:
- 8080:8080
depends_on:
- mongodb
links:
- mongodb

当容器被创建并运行时,它就可以工作了。但问题是我不知道在哪里以及如何定义 spring.data.mongodb.uri 以使用静态的东西,例如 spring.data.mongodb.uri=mongodb://mongo-hostname

这样做是否可能,是否有任何王牌解决方案或良好做法?

最佳答案

要访问 mongodb,您需要使用 docker-compose.yml 中定义的 mongodb 服务名称。

您可以使用如下所示的环境变量在应用程序属性中进行设置:

//aplication.properties
...
spring.data.mongodb.uri=${MONGODB_URI}

//docker-compose.yml
version: "3"
services:
mongodb:
image: mongo
container_name: "mongodb-test"
ports:
- 27017:27017
mongo-logger:
build: ./mongo-test
container_name: "mongo-test"
ports:
- 8080:8080
environment:
- MONGODB_URI=mongodb://mongodb
depends_on:
- mongodb

关于java - 如何为 MongoDB 和 Spring Boot 将主机名定义到 docker-compose.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com