【问题标题】:Unable to connect to MongoDB and MySQL by Spring App using DockerSpring App 使用 Docker 无法连接到 MongoDB 和 MySQL
【发布时间】:2016-10-28 17:40:40
【问题描述】:

我正在使用docker-compose.yml 如下所示创建容器。我是新手,我正在尝试创建一个 nginx 容器、带有 spring 应用程序的 tomcat 容器和两个数据库容器(mongo 和 mysql)。在 Debian 服务器上 Spring 应用程序有效,所以我认为问题在于 docker 容器的配置。

  nginx:
    image: nginx
    links:
     - web
    ports:
     - "80:80"
    volumes:
     - ./nginx.conf:/etc/nginx/nginx.conf

  web:
    image: tomcat:8.0-jre8
    links:
      - mongo
      - mysql
    volumes:
     - ./bint.war:/usr/local/tomcat/webapps/bint.war
     - ./tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml

  mongo:
    image: mongo:2.7
    ports: 
      - "27017:27017"
  mysql:
    image: mysql
    ports: 
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

我可以通过工作台和 robomongo 等工具连接到 mongo 和 mysql,只需使用 localhost 和默认端口,但 spring 应用程序不能。我正在开发 OSX 10.11.5。

Docker version 1.12.0-rc2, build 906eacd, experimental
docker-compose version 1.8.0-rc1, build 9bf6bc6
docker-machine version 0.8.0-rc1, build fffa6c9

MySql 堆栈跟踪

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    web_1    | Caused by: java.net.ConnectException: Connection refused
web_1    |  at java.net.PlainSocketImpl.socketConnect(Native Method)
web_1    |  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
web_1    |  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
web_1    |  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
web_1    |  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
web_1    |  at java.net.Socket.connect(Socket.java:589)
web_1    |  at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:214)
web_1    |  at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:298)
web_1    |  ... 58 more

Mongo 堆栈跟踪

web_1    | Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type [java.lang.String] to required type [int]; nested exception is java.lang.NumberFormatException: For input string: "tcp://172.17.0.3:27017"
web_1    |  at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:77)
web_1    |  at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:54)
web_1    |  at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1033)
web_1    |  at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
web_1    |  at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
web_1    |  ... 28 more

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您的 spring 应用将能够使用 mongo:27017 和 mysql:3306 进行连接。 使用 localhost:27017 和 localhost:3306 将无法访问它。

    您的另一个选择是 docker-compose 版本 2,然后默认情况下所有容器将共享同一个网络。

    【讨论】:

      【解决方案2】:

      我知道 Docker 应该足以使用链接来访问创建的默认网络上的另一个容器。我建议尝试在具有相同容器名称的所有容器上使用主机名属性,以确保确定。我认为这可能有助于解决 MySQL 错误 - 不幸的是,我们没有在堆栈跟踪中看到连接 url,以确保正在尝试使用适当的主机名 -

      对于 MongoDB 错误,我面临同样的问题。由于某种原因,Docker 将定义的端口 27017 更改为tcp://172.17.0.3:27017,这是字符串转换异常的原因。 spring 中可能有一些属性读取器从 application.properties 或其他一些 env 变量获取 mongo db 端口但弄错了。我正在调查为什么会这样。

      【讨论】:

        【解决方案3】:

        好的,在某个地方找到了解决 mongodb 问题的方法......它与我所拥有的和解释的家伙所拥有的有点不同。我们将 docker-composer.yml 上的 mongodb 定义为

        mongodb: 图片:蒙哥 等等……

        似乎链接工作或过去工作的方式是使用一些 env vars 以及一些如何最终覆盖 spring 参数 mongodb.port 或 mongo.port。

        MONGO_PORT='tcp://172.17.0.3:27017'

        解决方法是重命名我使用 mdb: 等的容器,然后问题就消失了。

        希望这会有所帮助。将尝试对此进行更多挖掘,以了解实际在做什么

        【讨论】:

          猜你喜欢
          • 2020-07-12
          • 2018-05-28
          • 2020-07-24
          • 2021-06-14
          • 2020-06-06
          • 2020-04-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多