【发布时间】:2020-08-06 04:08:44
【问题描述】:
我正在使用 docker compose 在本地机器上运行 2 个容器。第一个是 mongo 容器,第二个是 spring boot 应用程序。
这是我的 Spring Boot 的 Dockerfile
VOLUME /tmp
ADD target/app.jar app.jar
EXPOSE 8080
RUN bash -c "touch /app.jar"
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongo/test", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
这是我的 Spring Boot 的应用程序属性
# mongodb configuration0
dockerspring.data.mongodb.uri= mongodb://mongo:27000/test
这是我的 docker-compose.yml
version: '3.1'
services:
level-2-springboot:
image: level-2:latest
restart: always
container_name: level_2_microservice
ports:
- 8081:8080
working_dir: /tmp
depends_on:
- mongo
mongo:
image: mongo
container_name: mongo
ports:
- 27000:27017
restart: always
这是我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yash</groupId>
<artifactId>spring-sync-ms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-sync</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>app</finalName>
</build>
</project>
我执行这个来为我的 Spring Boot 应用程序创建映像
docker build -t level-2 .
看到我的图像后,我执行docker-compose up,它们工作得很好,没有错误
这是正在运行的容器
但是当我向 localhost:8081/api/employees/ 或 localhost:8080/api/employees/ 发出 POST 或 GET 请求时,我会从 Postman 那里收到这条消息
无法得到任何回应
下面是我的项目结构
如果我在 eclipse 和 mongo 上手动运行应用程序并执行 POST/GET 请求,我会得到 201 OK,但是当我在容器中使用 docker 执行此操作时,它们不会相互通信。有人知道这是什么原因吗?
【问题讨论】:
-
尝试在 docker 容器外运行你的
app.jar,确保它被正确打包 -
你的意思是把 docker-compose.yml 带到 spring 同步之外,然后 docker-compose up 在 spring 同步之外?
-
Could not get any response 这听起来像是你的 @Controller 类的问题
-
@Gewure 这就是我的想法,但是当我在没有容器和 docker 的情况下执行此操作时(意味着将其作为 Spring Boot 应用程序手动运行),它没有问题,这有意义吗?
标签: spring mongodb docker containers