【发布时间】:2020-08-18 14:18:57
【问题描述】:
我是 docker 新手。我需要将 mysql 单独容器与 tomcat 连接到另一个单独的容器。所以首先我使用
拉取 docker 镜像docker 拉mysql
之后我尝试运行镜像并通过以下命令运行数据库容器。
docker run --name easql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
之后我通过运行以下命令创建一个数据库。
docker exec -it easql mysql -uroot -p
然后运行mysql命令创建一个名为custom的数据库。 之后,我创建了一个文件夹并创建了一个 Dockerfile 和 webapp 文件夹。在我的 webapp 文件夹中,我创建了名为 db1.jsp 文件的文件夹,我的 db1.jsp 文件如下所示。
<%@ page import="pageNumber.*,java.util.*, java.io.*, java.sql.*"%>
<!DOCTYPE html>
<body>
<%
try {
java.sql.Connection con;
Class.forName("org.gjt.mm.mysql.Driver");
con = DriverManager.getConnection("jdbc:mysql://db:3306/custom", "root", "1234");
out.println ("database successfully opened.");
}
catch(SQLException e) {
out.println("SQLException caught: " +e.getMessage());
}
%>
</body>
我的 Dockerfile 正在关注
FROM tomcat:8-jre8
COPY ./webapp /usr/local/tomcat/webapps/webapp
CMD ["catalina.sh", "run"]
我的 context.xml 文件如下。
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/custom" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
url="jdbc:mysql://db:3306/custom"
driverClassName="com.mysql.jdbc.Driver"
username="root" password="1234"
/>
</Context>
之后,我通过转到文件夹内部并运行以下命令来构建此应用程序
docker build -t 123adw .
docker run --name hello -p 4000:8080 123adw
之后我通过以下命令在应用程序之间建立链接
docker run --name 连接 --link easql:mysql -d 123adw
但是当我运行 http://localhost:4000/webapp/db1.jsp 时,它给了我以下错误。
捕获的 SQLException: Communications link failure 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有收到服务器发来的任何数据包。
任何人都可以帮我解决这个问题。
【问题讨论】:
标签: docker containers