簡體   English   中英

從 Spring App (docker-compose) 獲取 Mongodb 連接上的“異常打開套接字”

[英]Getting “Exception opening socket” on Mongodb connection from Spring App (docker-compose)

即使我在應用程序屬性中給出,

spring.data.mongodb.host=api-database4

作為docker-compose文件中MongoDB的容器名和主機名的主機名,Spring應用程序仍然無法連接到MongoDB實例。 但是,我可以從 MongoDB Compass 連接到localhost:27030但不能連接到mongodb://api-database4:27030/messagingServiceDb

我的 docker-compose 文件;

version: '3'

services:
  messaging-api6:
    container_name: 'messaging-api6'
    build: ./messaging-api
    restart: always
    ports:
      - 8085:8080
    depends_on:
      - api-database4
    networks:
      - shared-net

  api-database4:
    image: mongo
    container_name: api-database4
    hostname: api-database4
    restart: always
    ports:
      - 27030:27017
    networks:
      - shared-net
    command: mongod --bind_ip_all

networks:
  shared-net:
    driver: bridge

我的 Spring 應用程序的 Docker 文件是;

FROM openjdk:12-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

我的 application.properties 是;

#Local MongoDB config
spring.data.mongodb.database=messagingServiceDb
spring.data.mongodb.port=27030
spring.data.mongodb.host=api-database4

整個代碼可以在這里看到。

如何讓我的 docker 容器上的 spring 應用程序創建到另一個 docker 容器上的 MongoDB 實例的連接?

我已經嘗試過類似問題的解決方案並復制它們,它仍然給出相同的錯誤。

Spring 應用程序的日志

編輯和解決方案:

我通過注釋掉下面的配置解決了這個問題,

#Local MongoDB config
#spring.data.mongodb.database=messagingServiceDb
spring.data.mongodb.host=api-database4
spring.data.mongodb.port=27030

剩下的問題是,為什么? 那是我嘗試連接的正確端口。 會不會跟配置順序有關?

docker-compose ports指令將容器端口發布到主機 容器在暴露的端口上相互通信。 您可以使用 netcat 測試一個容器是否可以訪問另一個容器。

docker exec -it messaging-api6 bash
> apt-get install netcat
> nc -z -v api-database4 27030
> nc -z -v api-database4 27017

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM