Tob*_*hek 6 java mysql jdbc docker jakarta-ee
我是 docker 新手,我尝试从本地计算机(主机)连接到 mysql 容器。
\n\n我用以下命令拉取了最新版本的mysql:
\n\ndocker pull mysql/mysql-server:latest\nRun Code Online (Sandbox Code Playgroud)\n\n并启动它(以及 myadmin 容器,其中包含以下内容:
\n\ndocker run --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql --default-authentication-plugin=mysql_native_password -P 3306 -h localhost\ndocker run --name myadmin -d --link mysql1:db -p 8081:80 phpmyadmin/phpmyadmin\nRun Code Online (Sandbox Code Playgroud)\n\n我可以在本地浏览器上访问 phpmyadmin(使用 localhost:8081),并且创建了一个名为“userDB”的数据库。
\n\n在这里你可以看到 docker 检查:
\n\ndocker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n03126272c0e3 phpmyadmin/phpmyadmin "/run.sh supervisord\xe2\x80\xa6" 7 minutes ago Up 7 minutes 9000/tcp, 0.0.0.0:8081->80/tcp myadmin\nc8d032921d7c mysql "docker-entrypoint.s\xe2\x80\xa6" 8 minutes ago Up 8 minutes 3306/tcp, 33060/tcp mysql1\nRun Code Online (Sandbox Code Playgroud)\n\n在我的本地 JavaEE 应用程序(在 GlassFish Web 服务器上运行)上,我尝试使用以下命令连接此 mysql 数据库:
\n\n try {\n Class.forName("com.mysql.jdbc.Driver");\n Connection con = DriverManager.getConnection(\n "jdbc:mysql://localhost:3306/userDB", "root", "root");\n return con;\n } catch (Exception ex) {\n System.out.println("Database.getConnection() Error -->"\n + ex.getMessage());\n return null;\n }\nRun Code Online (Sandbox Code Playgroud)\n\n并得到以下异常:\ncom.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\nRun Code Online (Sandbox Code Playgroud)\n\n我犯了什么错误?如何将我的 Java 应用程序与 mysql docker 容器连接?
\n第一个问题是端口映射必须是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
Run Code Online (Sandbox Code Playgroud)
下一个问题是更新 maven 中的 JDBC 驱动程序(到最新)。
最后但并非最不重要的一点是:useSSL 参数设置为 false(在本地计算机上不需要)。
| 归档时间: |
|
| 查看次数: |
16358 次 |
| 最近记录: |