如何使用 JDBC 连接从主机到 docker mysql 服务器

2023-11-24

我是 docker 新手,我尝试从本地计算机(主机)连接到 mysql 容器。

我用以下命令拉取了最新版本的mysql:

docker pull mysql/mysql-server:latest

并启动它(以及 myadmin 容器,其中包含以下内容:

docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql --default-authentication-plugin=mysql_native_password -P 3306 -h localhost
docker run --name myadmin -d --link mysql1:db -p 8081:80 phpmyadmin/phpmyadmin

我可以在本地浏览器上访问 phpmyadmin(使用 localhost:8081),并且创建了一个名为“userDB”的数据库。

在这里你可以看到 docker 检查:

docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                            NAMES
03126272c0e3        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   7 minutes ago       Up 7 minutes        9000/tcp, 0.0.0.0:8081->80/tcp   myadmin
c8d032921d7c        mysql                   "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes        3306/tcp, 33060/tcp              mysql1

在我的本地 JavaEE 应用程序(在 GlassFish Web 服务器上运行)上,我尝试使用以下命令连接此 mysql 数据库:

    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/userDB", "root", "root");
        return con;
    } catch (Exception ex) {
        System.out.println("Database.getConnection() Error -->"
                + ex.getMessage());
        return null;
    }

并得到以下异常: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

我犯了什么错误?如何将我的 Java 应用程序与 mysql docker 容器连接?


第一个问题是端口映射必须是docker运行语句中的第一个参数之一。这是最终的运行语句:

docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql --default-authentication-plugin=mysql_native_password -h 127.0.0.1

下一个问题是更新 maven 中的 JDBC 驱动程序(到最新)。

最后但并非最不重要的一点是:useSSL 参数设置为 false(在本地计算机上不需要)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JDBC 连接从主机到 docker mysql 服务器 的相关文章

随机推荐