簡體   English   中英

Docker - MySQL 和 Java 容器連接錯誤

[英]Docker - MySQL and Java container connectivity error

我正在嘗試使用 JAVA 和 MySQL 創建一個微服務的簡單任務。 我在 Windows 10 上使用 docker-compose 和 Docker 桌面。

Client: Docker Engine - Community
Version:           19.03.5
API version:       1.40
Server: Docker Engine - Community
Engine:
Version:          19.03.5
API version:      1.40 (minimum version 1.12)

我的 docker-compose.yml 是

version: '3.1'
services:
  db:
    #image: mysql:5.7.22
    image: mysql:latest
    ports: ["3306:3306"]
    hostname: db
    environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=Users
    container_name: mysqldatabase
  web:
    build: docker-mysql-connector 
    image: docker-mysql-connector
    hostname: web
    tty: true
    depends_on:
      - db
    links:
      - db:db

我檢查連接性的 JAVA 代碼是

package com.prasad.docker.mysql;

import java.net.InetAddress;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Map;

public class MySQLConnection {
    public static void main(String[] args) throws Exception {
        String ipAddr = InetAddress.getLocalHost().getHostName();
        System.out.println("Printing IP address of the host " + ipAddr);
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
        Thread.sleep(10000);

        boolean connected = false;
        while (!connected) {
            try {

                String url = "jdbc:mysql://db:3306/Users?autoReconnect=false&useSSL=false";
                String user = "root";
                String password = "root";
                System.out.println("Connecting to URL " + url);
                Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection(url, user, password);
                System.out.println("Connection was successful");
                connected = true;
            } catch (Exception e) {
                System.err.println("Error connecting to database");
                e.printStackTrace();
                Thread.sleep(5000);
            }
        }

    }
}

當我 output 運行 JAVA ode 的 web 容器的日志時出現以下錯誤

Connecting to URL jdbc:mysql://db:3306/Users?autoReconnect=false&useSSL=false
Error connecting to database
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
       at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:590)
       at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:57)
       at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1606)
       at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:633)
       at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347)
       at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219)
       at java.sql.DriverManager.getConnection(DriverManager.java:664)
       at java.sql.DriverManager.getConnection(DriverManager.java:247)
       at com.prasad.docker.mysql.MySQLConnection.main(MySQLConnection.java:34)
Caused by: com.mysql.cj.core.exceptions.CJCommunicationsException: Communications link failure

我能夠從容器內的 MySQL Workbench 和 MySQL 數據庫成功測試連接。 我只從 JAVA 代碼中得到連接錯誤。 我嘗試使用 MySQL 數據庫的最新版本和 v5.7.22。 兩種情況下的錯誤相同。 任何幫助表示贊賞

您是否提到該實例適用於本地主機?

version: '3.1'
services:
  db:
    #image: mysql:5.7.22
    image: mysql:latest
    ports: ["3306:3306"]
    hostname: db
    environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=Users
    container_name: mysqldatabase
  web:
    build: docker-mysql-connector 
    image: docker-mysql-connector
    hostname: web
    tty: true
    depends_on:
      - db
    links:
      - db:db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://docker-mysql:3306/database?autoReconnect=true&useSSL=false

另外添加network_mode: "host"也會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM