首页 > 解决方案 > 无法连接到 mongo 容器

问题描述

我有一个先前的问题(我认为至少),当我设法修复我遇到的错误时,或多或少变得无用了。但是我的新错误是我似乎无法从我的 docker 映像中连接到 mongodb

码头工人-compose.yml:

version: '3.1'
services:
  company-repo-docker-app:
    image: company-repo-image
    build:
        context: ./
    dockerfile: Dockerfile
    depends_on:
        - mongo
ports:
    - 8080:8080
mongo:
image: mongo
ports:
  - '27017:27017'
networks:
  mongo_net:
    ipv4_address: 172.28.0.2

networks:
  mongo_net:
    driver: bridge
    ipam:
      driver: default
      config:
      -
       subnet: 172.28.0.2/24

应用程序属性:

spring.data.mongodb.database=myDb
spring.data.mongodb.host=172.28.0.2 
spring.data.mongodb.port=27017

而实际的错误:

 com.mongodb.MongoSocketOpenException: Exception opening socket
   at com.mongodb.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.6.4.jar!/:na]
   at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.6.4.jar!/:na]
   at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongodb-driver-core-3.6.4.jar!/:na]
   at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.net.SocketTimeoutException: connect timed out 

标签: javaspringmongodbdockerdocker-compose

解决方案


您已在docker-compose.yml文件中明确创建了一个网络,并将您的数据库设置为使用该网络。Docker Compose 还为您创建了一个默认网络,并且由于您的应用程序没有明确声明任何网络,因此它仅附加到默认网络。然后这两个容器在不同的网络上,一个无法到达另一个。

这里最简单的解决方案是删除所有手动网络配置:

version: '3.1'
services:
  company-repo-docker-app:
    image: company-repo-image
    build:
      context: ./
    depends_on:
      - mongo
    ports:
      - '8080:8080'
  mongo:
    image: mongo
    ports:
      - '27017:27017'

服务块的名称将是有效的 DNS 主机名,您可以在配置中设置spring.data.mongodb.host=mongo.


推荐阅读