java - docker compose with services 和 mongo 数据库抛出错误打开套接字
问题描述
我有两个服务,它们是 application.yml 的:
category-service -> application.yml
spring:
application:
name: category-service
data:
mongodb:
host: categoriesdb
port: 27017
database: categoriesdb
server:
port: 8081
productcatalog-service -> application.yml
spring:
application:
name: productcatalog-service
data:
mongodb:
host: productsdb
port: 27018
database: productsdb
server:
port: 8080
和码头工人组成:
version: "3.8"
services:
productcatalog-service:
container_name: productcatalog-service
image: productcatalog-service
build:
./productcatalog-service
ports:
- 8080:8080
links:
- productsdb
category-service:
container_name: category-service
image: category-service
build:
./category-service
ports:
- 8081:8081
links:
- categoriesdb
categoriesdb:
container_name: categoriesdb
image: mongo:latest
volumes:
- ./data/categories-db:/data/db"
ports:
- 27017:27017
productsdb:
container_name: productsdb
image: mongo:latest
volumes:
- ./data/products-db:/data/db
ports:
- 27018:27017
而且我在运行时遇到问题,因为我在 docker-compose up 之后得到了:
productcatalog-service | at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.1.1.jar!/:na]
productcatalog-service | at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
productcatalog-service | Caused by: java.net.UnknownHostException: productsdb: Name or service not known
productcatalog-service | at java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:932) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1517) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:851) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1507) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1366) ~[na:na]
productcatalog-service | at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1300) ~[na:na]
productcatalog-service | at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:203) ~[mongodb-driver-core-4.1.1.jar!/:na]
productcatalog-service | ... 6 common frames omitted
productcatalog-service |
category-service | 2020-12-05 23:41:05.335 INFO 1 --- [127.0.0.1:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 127.0.0.1:27017
category-service |
category-service | com.mongodb.MongoSocketOpenException: Exception opening socket
category-service | at com.mongodb.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler.failed(AsynchronousSocketChannelStream.java:124) ~[mongodb-driver-core-4.1.1.jar!/:na]
category-service | at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:129) ~[na:na]
category-service | at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:285) ~[na:na]
category-service | at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:200) ~[na:na]
category-service | at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:215) ~[na:na]
category-service | at java.base/sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) ~[na:na]
category-service | at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[na:na]
category-service | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
category-service | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
category-service | at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
category-service | Caused by: java.net.ConnectException: Connection refused
category-service | at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) ~[na:na]
category-service | at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:254) ~[na:na]
综上所述,我想使用一个 docker-compose 运行这两个服务,每个服务可以分配一个 mongodb。如果我对建筑的想法是错误的,请纠正我。
谢谢你的帮助!
解决方案
似乎 productsdb 需要改变:
productsdb:
container_name: productsdb
image: mongo:latest
volumes:
- ./data/products-db:/data/db
ports:
- 27018:27018
推荐阅读
- ios - 如何在 WKWebView 中使用动态查询字符串打开 url
- ios - 如何设置 BarChartDataEntry 标签(字符串不是双精度)而不是 xaxis 标签
- react-native - 安装 react-native-maps 后无法构建
- javascript - 承诺拒绝没有正确传播错误
- linux - 脚本找不到现有文件
- java - 用于 TableView 行的 JavaFx 淡入淡出
- reactjs - UseContext 提供程序在办公室 JS 插件中不起作用
- sharepoint-2013 - 如何在 excel 中创建自定义文档属性,以便可以使用 SharePoint 工作流自动填充
- python-3.x - 当键是字节时,从python中的字典创建数据框?
- python - 重新分配变量时不会发生 Python 列表突变。为什么?