表不包括';Docker容器中的Java MVC应用程序尝试连接到另一个容器中的MySQL时不存在错误

表不包括';Docker容器中的Java MVC应用程序尝试连接到另一个容器中的MySQL时不存在错误,java,mysql,hibernate,docker,model-view-controller,Java,Mysql,Hibernate,Docker,Model View Controller,我有一个Java Hibernate MVC web应用程序,它使用mySql数据库。它在我的计算机上运行良好,但当我尝试使用docker容器运行它时,它不起作用。我正在Windows Home上使用Docker工具箱,因为最新版本的Docker需要Windows Professional -------请忽略我下面代码片段中的类、函数和数据库名称,我很快更改了名称以保持匿名性。我已经仔细核实,实际上所有的名字都是正确的---------- 我在一个容器中有一个在Tomcat上运行的MVC we

我有一个Java Hibernate MVC web应用程序,它使用mySql数据库。它在我的计算机上运行良好,但当我尝试使用docker容器运行它时,它不起作用。我正在Windows Home上使用Docker工具箱,因为最新版本的Docker需要Windows Professional

-------请忽略我下面代码片段中的类、函数和数据库名称,我很快更改了名称以保持匿名性。我已经仔细核实,实际上所有的名字都是正确的----------

我在一个容器中有一个在Tomcat上运行的MVC web应用程序,在另一个容器中运行一个mySql数据库。我认为我的应用程序可以连接到数据库,因为我能够将web应用程序中的主页加载到Docker容器中而不会出错。但是,当我尝试在一个MySql表中放入某些内容时,会出现以下错误:

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'no_visits.visitors' doesn't exist
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
com.mysql.jdbc.Util.getInstance(Util.java:408)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966)
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:353)
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
org.hibernate.loader.Loader.getResultSet(Loader.java:2168)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1931)
org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1893)
org.hibernate.loader.Loader.doQuery(Loader.java:938)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
org.hibernate.loader.Loader.doList(Loader.java:2692)
org.hibernate.loader.Loader.doList(Loader.java:2675)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
org.hibernate.loader.Loader.list(Loader.java:2502)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502)
org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:392)
org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1489)
org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1445)
org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
org.hibernate.query.Query.getResultList(Query.java:146)
com.horse.novisit.dao.VisitDAOImpl.isVisit(isVisitImpl.java:79)
com.horse.novisit.service.VisitServiceImpl.isVisit(isVisitImpl.java:67)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
com.sun.proxy.$Proxy52.isLongUrlInDB(Unknown Source)
com.horse.noToVisit.controller.visitController.postBigVisit(VisitController.java:47)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

这还不是一个直接的答案。只是一种帮助您排除故障的方法

容器运行时:

docker ps
查找进程id

docker exec -it theidgoeshere bash
这将使您在运行的docker进程中使用bash shell。从那里可以检查正在运行的进程的日志文件。您可能没有可用的bash,但该命令非常有用。请看这里:

如果这都是希腊语,那么我可以给你指一些更多的在线材料。

试试这个:

docker网络创建-d桥接我的网络

docker build-t我的mysqldb。

docker-run-p3306:3306--network=my-network--name-no-visit-itd-my-mysqldb

docker构建-t spring mvc映像。

docker run-p8080:8080--network=my network--name spring mvc container-itd-e DATABASE\u HOST=no visit-e DATABASE\u PORT=3306-e DATABASE\u name=no\u visit-e DATABASE\u USER=visitor-e DATABASE\u PASSWORD=visitor spring mvc image

之后,当您运行
docker ps
时,它应该会显示处于运行状态的两个容器


如果问题仍然存在,请检查日志
docker logs no visit

问题已解决。我正在运行的.sql脚本中的数据库名称被证明是错误的。

您是否知道可以连接到容器并在其中四处查看?我进入了mysql容器,表是正确的。您是否可能拼写错了表名,比如visitor,而不是visitor,反之亦然。情况并非如此。我是一个很忙的人,但我确实花了我仅有的一点时间仔细阅读我的代码。上面的任何拼写错误都是因为我很快更改了类和函数的名称,以保持代码的匿名性。这是一个我多年没有见过的表达式。我会试着看一下日志,看看是否有什么帮助,但这并不能回答我的问题。名字很好。我很快在这个论坛上修改了它们,使我的代码匿名,可能会有一些打字错误。