【问题标题】:Docker container not connecting mongodb hostDocker容器未连接mongodb主机
【发布时间】:2019-06-22 16:14:36
【问题描述】:

我正面临来自 docker 容器的 MongoDB 连接问题,我阅读了一些 stackoverflow 答案,但没有帮助我解决我的问题。

我的 application.yml 文件有以下内容,

spring:
   application:
    name: web-ui-service
   data:
     mongodb:
       uri: mongodb://<username>:<pwd>@172.17.0.1:27017/database

我的 docker-compose 文件有以下内容,

版本:'3.5' 服务:

sp-app-web-ui:
  container_name: sp-app-web-ui
  image: swimming-pool/web-ui-service
    environment:
    - DOCKER_HOST_IP=mongodb://172.17.0.1:27017
     - SPRING_DATA_MONGODB_DATABASE=swimming-pool
   ports:
     - 8080:8080
   networks:
     - swimming-pool-app
       restart: unless-stopped

     networks:
       swimming-pool-app:
     default:
       driver: bridge

我读了这篇博客From inside of a Docker container, how do I connect to the localhost of the machine?

但仍然面临以下问题,

sp-app-web-ui | com.mongodb.MongoSocketOpenException:异常打开套接字 sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_111] sp-app-web-ui |引起:java.net.ConnectException:连接被拒绝(连接被拒绝) sp-app-web-ui |在 java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_111] sp-app-web-ui |在 java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_111] sp-app-web-ui |在 com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.2.jar!/:na] sp-app-web-ui |在 com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.2.jar!/:na]

我正在使用 Debian 和 Docker 18.06。如果有人帮助我,那就太好了。提前致谢!

【问题讨论】:

    标签: mongodb docker docker-compose dockerfile docker-networking


    【解决方案1】:

    我已经解决了这个问题,我的 docker-compose 文件如下所示,

    version: '3.5'
    
    services:
    
      sp-app-web-ui:
      container_name: sp-app-web-ui
      image: swimming-pool/web-ui-service
      environment:
        - SPRING_PROFILES_ACTIVE=dev
      ports:
        - 8080:8080
      network_mode: host
    

    并在 mongo.conf 文件的 bindIp 变量中添加“127.0.0.1”。

    我的 application.yml 有以下内容,

    spring:
       application:
        name: web-ui-service
        data:
         mongodb:
           uri: mongodb://<username>:<pwd>@172.0.0.1:27017/database
    

    当您在 linux 上 ping ip a 时,此 IP 127.0.0.1 从 docker0 获取。

    【讨论】:

      【解决方案2】:

      您可能正在寻找的是将network_mode: "host" 添加到您的 docker compose 服务中:

      sp-app-web-ui:
        container_name: sp-app-web-ui
        image: swimming-pool/web-ui-service
          environment:
          - DOCKER_HOST_IP=mongodb://172.17.0.1:27017
           - SPRING_DATA_MONGODB_DATABASE=swimming-pool
         ports:
           - 8080:8080
      
         # https://docs.docker.com/compose/compose-file/#network_mode
         network_mode: "host"
      

      您可以在docs了解更多信息

      【讨论】:

      • 非常感谢您的支持,我尝试使用它但给了我一个 docker 错误:'network_mode' 和 'networks' 无法组合我也将驱动程序桥更改为主机但未连接。
      • 我的 mongo.conf 文件有 net: port: 27017 bindIp: 127.0.0.1,172.17.0.1,0.0.0.0
      • 还是同样的问题 :-(
      【解决方案3】:

      使用下面的 docker-compose.yml。然后运行 ​​mongodb 和 mongo-express(访问 mongodb 的 UI)

      version: '3.1'
      
      services:
      
        mongo:
          image: mongo:4.4.5
          restart: always
          ports:
            - 27017:27017
          environment:
            MONGO_INITDB_ROOT_USERNAME: root
            MONGO_INITDB_ROOT_PASSWORD: example
        
        mongo-express:
          image: mongo-express
          restart: always
          ports:
            - 8081:8081
          environment:
            ME_CONFIG_MONGODB_ADMINUSERNAME: root
            ME_CONFIG_MONGODB_ADMINPASSWORD: example
            ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
      

      【讨论】:

        猜你喜欢
        • 2018-01-09
        • 1970-01-01
        • 2020-01-20
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 2018-01-03
        • 2018-04-11
        相关资源
        最近更新 更多