我正在使用docker compose在本地计算机上运行2个容器。第一个是mongo容器,第二个是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请求时,我将从邮递员那里收到此消息
无法得到任何回应
下面是我的项目结构
如果我在eclipse和mongo上手动运行该应用程序并执行POST / GET请求,我会得到201 OK,但是当我在容器中使用docker进行操作时,它们不会互相交谈。有人知道是什么原因造成的吗?
我咨询了互联网,我想我得到了您所需要的。
接下来的问题是“我们的服务容器如何与Mongo容器?”为此,我们进入container linking。运行容器时,可以传递可选的
–link
参数,指定新容器需要运行的容器name能够交流。因此使用我们的命令
docker run -P -d --name employee --link mongodb microservicedemo/employee
我们启动新的容器图像,在后台暴露其端口(-P)(-d),将其命名为employee(–name),并告诉其链接到名为“ mongodb”的容器(-link)。链接这些将执行以下操作:
[在雇员容器中创建一个指向宿主文件的主机文件条目,MongoDB容器的运行位置插入许多员工容器中的环境变量以帮助进行任何操作需要其他程序访问。
要查看它们的运行:
docker exec employee bash -c 'env |grep MONGODB'
允许容器直接通过暴露的端口进行通信,因此无需担心软管机器零件映射。
在应用映像对其进行修复之前,专门指定network = mynetwork。例如
docker run --network=mynetwork pritam