在docker-compose.yaml中配置应用程序和MySQL数据库-无法打开JDBC连接

时间:2018-10-18 21:04:19

标签: mysql docker docker-compose yaml containers

我在下面的docker-compose.yaml文件中配置了一个应用和mysql数据库。当两个服务都启动时,发送http请求时,应用程序无法打开与数据库的连接。当应用程序和mysql DB在单独的容器中定义时,请求成功。我确信在docker compose配置中这很简单。

version: '3.7'

services:
  database:
    image: mysql:5.7
    container_name: docker_test-device-telemetry-mysql
    command: --explicit_defaults_for_timestamp
    environment:
      MYSQL_ROOT_PASSWORD: 12345
      MYSQL_ALLOW_EMPTY_PASSWORD: "no"

    volumes:
    - ./initdb.d:/docker-entrypoint-initdb.d
    ports:
    - "6603:3306"

  device-telemetry:
    image: 224713337986.dkr.ecr.eu-west-1.amazonaws.com/device-telemetry:2.5.0
    container_name: docker_test-device-telemetry-app
    volumes:
      - ./application.yaml:/application.yaml
      - ./bootstrap.yaml:/bootstrap.yaml
    ports:
      - "7857:7847"
    depends_on:
      - database

“时间戳”:“ 2018-10-18T20:46:17.654 + 0000”,   “状态”:500,   “错误”:“内部服务器错误”,   “ exception”:“ org.springframework.transaction.CannotCreateTransactionException”,   “ message”:“ 无法为事务打开JDBC连接;嵌套异常为java.sql.SQLException:无法创建PoolableConnectionFactory (通信链接失败\ n \ n最后一次成功发送到服务器的数据包为0毫秒驱动程序尚未收到来自服务器的任何数据包。)“, }

1 个答案:

答案 0 :(得分:0)

问题出在对URL的引用中,该URL包含application.yaml中的数据库详细信息

应该是

URL:jdbc:mysql:// 数据库:3306 / local_telemetry

其中database是在docker-compose.yaml中定义的数据库的名称

而不是

url:jdbc:mysql:// 127.0.0.1 :3306 / local_telemetry