使用 jdbc 驱动程序在 docker 容器中连接 tomcat 和 mysql

Posted

技术标签:

【中文标题】使用 jdbc 驱动程序在 docker 容器中连接 tomcat 和 mysql【英文标题】:connect tomcat and mysql in docker container with jdbc driver 【发布时间】:2018-12-10 06:45:08 【问题描述】:

我正在学习 docker 并尝试将使用 tomcat 和 mysql 的 java web 应用程序放入容器中。但我遇到了一些问题,没有解决方案让我正常工作。

错误信息

我的架构

tomcat 文件夹 - docker 文件

FROM tomcat:latest
RUN mkdir -p /usr/local/tomcat/webapps/test/
COPY ./mysql-connector-java-5.1.44-bin.jar /usr/local/tomcat/webapps/test
COPY ./db.jsp /usr/local/tomcat/webapps/test 
COPY ./web.xml /usr/local/tomcat/webapps/test
CMD ["catalina.sh", "run"]

tomcat 文件夹 - db.jsp

<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>

<html>
<head><title>회원 목록</title></head>
<body>

MEMBER 테이블의 내용
<table  border="1">
<tr>
    <td>이름</td><td>아이디</td><td>이메일</td>
</tr>
<%
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    try 
        Class.forName("com.mysql.jdbc.Driver");
        String jdbcDriver = "jdbc:mysql://mysql1:8888";
        String dbUser = "..";
        String dbPass = "..";

        String query = "select * from test";

        conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);

        stmt = conn.createStatement();

        rs = stmt.executeQuery(query);

         while (rs.next()) 
                String sqlRecipeProcess = rs.getString("id");
                String sqlRecipeProcess2 = rs.getString("name");
        


    catch(SQLException ex) 
        out.println(ex.getMessage());
        ex.printStackTrace();
     finally 
        if (rs != null) try  rs.close();  catch(SQLException ex) 
        if (stmt != null) try  stmt.close();  catch(SQLException ex) 

        if (conn != null) try  conn.close();  catch(SQLException ex) 
    
%>
</table>

</body>
</html>`

mysql 文件夹 - dockerfile

FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=".."
ENV MYSQL_DATABASE=".."
ENV MYSQL_USER=".." 
ENV MYSQL_PASSWORD=".."
EXPOSE 3306

tomcat 文件夹 - mysql-connector-java-5.1.44-bin.jar

tomcat 文件夹 - web.xml

<web-app></web-app>

运行者: 码头工人构建 -t my-mysql 。 docker run -dit --name mysql1 -p 3306:3306 my-mysql

并使用 mysql workbench 输入数据(我授予了权限并在 docker mysql bash 上检查了数据。)

运行者:

docker build -t my-tomcat .
docker run -dit --link mysql1:my-mysql --name myTomcat1 -p 8888:8080 my-tomcat

访问http://localhost:8888/test/db.jsp

我认为 jdbc.jar 有问题或 db.jsp 有问题。

【问题讨论】:

请提供来自 tomcat 日志的完整异常堆栈跟踪。提供的信息没有为我们提供足够的信息来确定问题。 【参考方案1】:

您可以试试这个(假设 web.xml 是 Web 应用程序上下文文件):

FROM tomcat:latest
RUN mkdir -p /usr/local/tomcat/webapps/test/WEB-INF/lib
COPY ./mysql-connector-java-5.1.44-bin.jar /usr/local/tomcat/webapps/test/WEB-INF/lib
COPY ./db.jsp /usr/local/tomcat/webapps/test 
COPY ./web.xml /usr/local/tomcat/webapps/test/WEB-INF
CMD ["catalina.sh", "run"]

【讨论】:

以上是关于使用 jdbc 驱动程序在 docker 容器中连接 tomcat 和 mysql的主要内容,如果未能解决你的问题,请参考以下文章

使用 jdbc 驱动程序在 docker 容器中连接 tomcat 和 mysql

使用go webservice在docker中连接到mysql时连接被拒绝

无法使用 JDBC 在 android 中连接到 sql server 2008

Django 无法在 Docker 设置中连接到 Postgres

我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源?

我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源?