【问题标题】:Docker compose connection between java and mysql container not possibleDocker compose 无法在 java 和 mysql 容器之间建立连接
【发布时间】:2020-08-23 19:27:57
【问题描述】:

我有一个 java spring / hibernate 应用程序,我无法在 mysql 和 java 容器之间创建连接。当我只启动 mysql 容器并在 CMD 中手动运行 java 应用程序时,它工作正常。但是一旦 java 应用程序在容器中运行,我就会遇到以下问题:

bookAPI | com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
bookAPI |
bookAPI | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
bookAPI |      at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.21.jar!/:8.0.21]
bookAPI |      at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.21.jar!/:8.0.21]

如果我正确理解错误,java 容器可以发送到 mysql 容器,但反之则不行。我已将 java 容器链接到 mysql 容器。有人知道如何正确连接这些容器吗?

我的 docker-compose.yml 看起来像这样:

version: '3'
 
services:
  db:
    image: mysql:5.7
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: aaaaaa
      MYSQL_DATABASE: bookAPI
      MYSQL_USER: aaaaaa
      MYSQL_PASSWORD: aaaaaa
    ports:
      - 3306:3306
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8081:80
  java:
    container_name: bookAPI
    image: openjdk:8
    depends_on:
    - db
    volumes:
    - ./:/app
    working_dir: /app
    command: bash -c "cd /app && java -jar bookAPI.jar"  
    stdin_open: true
    tty: true
    ports:
      - 8080:8080
    links:
      - db

【问题讨论】:

标签: java mysql docker docker-compose dockerfile


【解决方案1】:

您也可以像这样使用 docker-compose 环境变量直接覆盖 applications.properties:

  java:
    container_name: bookAPI
    image: openjdk:8
    volumes:
    - ./:/app
    working_dir: /app
    command: bash -c "cd /app && java -jar bookAPI.jar"
    stdin_open: true
    tty: true
    environment:
      spring.datasource.url="jdbc:mysql://db:3306/bookAPI""
    links:
      - db
    ports:
      - 8080:8080

我建议你使用depends_on db而不是链接

depends_on:
  - db

【讨论】:

    【解决方案2】:

    好的,我解决了这个问题。要将 spring 应用程序与另一个 docker 容器连接,您需要将 application.properties url 值从 localhost 或 ip 更改为 docker maysql 容器名称。在本地运行它或运行 maven install 时这很棘手,因此最好的做法是在容器中启动应用程序时覆盖它。

      java:
        container_name: bookAPI
        image: openjdk:8
        volumes:
        - ./:/app
        working_dir: /app
        command: bash -c "cd /app && java -jar bookAPI.jar  --spring.datasource.url="jdbc:mysql://db:3306/bookAPI""  
        stdin_open: true
        tty: true
        links:
          - db
        ports:
          - 8080:8080
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2021-09-06
      相关资源
      最近更新 更多