mongodb - mongodb连接错误虽然springboot中的docker
问题描述
我正在学习 docker 并尝试为 springboot db 应用程序(jdk 10)创建一个 docker-compose.yml 文件。Spring boot 选择 27017 作为 mongodb 的默认端口,所以如果我使用以下命令启动 mongo 容器:
docker run -d -p 27017:27017 mongo
然后在 intellij 中启动我的应用程序,一切正常。当我尝试使用 docker-compose.yml 时,出现连接异常。
这是我的 Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这是我的 docker-compose.yml:
services:
java:
image: adoptopenjdk/openjdk10:latest
mongo:
image: mongo
expose:
- "27017"
ports:
- "0.0.0.0:27017:27017"
spring_boot_mongo:
build: .
ports:
- "8080:8080"
links:
- java
version: "2"
运行 docker-compose up 命令时出错:
localhost:27017
spring_boot_mongo_1 |
spring_boot_mongo_1 | com.mongodb.MongoSocketOpenException: Exception opening socket
spring_boot_mongo_1 | at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:67) ~[mongodb-driver-core-3.8.2.jar!/:na]
spring_boot_mongo_1 | at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.8.2.jar!/:na]
spring_boot_mongo_1 | at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.8.2.jar!/:na]
spring_boot_mongo_1 | at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
spring_boot_mongo_1 | Caused by: java.net.ConnectException: Connection refused (Connection refused)
spring_boot_mongo_1 | at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212]
spring_boot_mongo_1 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_212]
spring_boot_mongo_1 | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_212]
spring_boot_mongo_1 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_212]
spring_boot_mongo_1 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_212]
spring_boot_mongo_1 | at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_212]
spring_boot_mongo_1 | at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.8.2.jar!/:na]
spring_boot_mongo_1 | at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.8.2.jar!/:na]
spring_boot_mongo_1 | ... 3 common frames omitted
spring_boot_mongo_1 |
这是我在运行 docker ps 时看到的:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4da4948d04d9 spring-boot-mongodb-master_spring_boot_mongo "java -jar /app.jar" 11 seconds ago Up 10 seconds 0.0.0.0:8080->8080/tcp spring-boot-mongodb-master_spring_boot_mongo_1
e9a79f3ba8ab mongo "docker-entrypoint.s…" 12 seconds ago Up 10 seconds 0.0.0.0:27017->27017/tcp spring-boot-mongodb-master_mongo_1
这意味着 mongo 映射按预期工作(当我使用上述 docker run 命令启动 mongodb 容器时,我看到相同的 o/p),但未实现应用程序端口映射。有人可以帮帮我吗??
谢谢!
解决方案
来自同一个 docker-compose 的服务连接到同一个默认网络。当你想访问另一个容器时,你应该在你的 url 中使用服务名称。容器名称将自动解析为容器 IP。您无法使用 localhost 访问另一个容器 - 请改用服务名称。spring_boot_mongo
在您的情况下,您可以为您的服务设置环境变量:
spring_boot_mongo:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATA_MONGODB_.HOST=mongo
如果您使用的是弹簧数据 mongo。否则,设置环境变量以覆盖应用程序容器中的 uri。
推荐阅读
- octobercms - OctoberCMS:违反唯一约束时如何显示自定义错误消息?
- html - 电子邮件输入字段宽度仅随内联样式更改
- reactjs - 使用图像作为带有 react-select 的图标
- angular - 是否可以将 BehaviorSubject 转换为数组流?
- apache-camel - 如何在 quarkus camel 中“直接”使用 Apache Camel
- typescript - 如何在 Angular 8 中生成动态反应形式
- angular - Angular Material Table 刷新一次数据,然后停止刷新数据
- c# - 如何为 Xamarin.Android 实现证书透明度
- python - Python selenium 找不到点击按钮
- java - 更新操作在 jsp/servlet/mysql 中无法正常工作