docker容器中的java mvc应用程序尝试连接到另一个容器中的mysql时出现表不存在错误

5f0d552i  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(370)

我有一个使用mysql数据库的javahibernatemvc web应用程序。它在我的电脑上运行良好,但当我尝试使用docker容器运行它时就不起作用了。我正在windows home上使用docker工具箱,因为最新版本的docker需要windows professional。
-------请忽略我下面代码片段中的类、函数和数据库名称,我很快更改了名称以保持匿名性。我仔细核实过,实际上所有的名字都是正确的

rdlzhqv9

rdlzhqv91#

试试这个: docker network create -d bridge my-network docker build -t my-mysqldb . docker run -p 3306:3306 --network=my-network --name no-visit -itd my-mysqldb docker build -t spring-mvc-image . docker run -p 8080:8080 --network=my-network --name spring-mvc-container -itd -e DATABASE_HOST=no-visit -e DATABASE_PORT=3306 -e DATABASE_NAME=no_visit -e DATABASE_USER=visitor -e DATABASE_PASSWORD=visitor spring-mvc-image 在这之后当你跑的时候 docker ps 它应该向您显示处于运行状态的两个容器。
如果问题仍然存在,请检查日志 docker logs no-visit .

xoshrz7s

xoshrz7s2#

我在一个容器中有一个在tomcat上运行的mvcweb应用程序,在另一个容器中有一个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)
mum43rcc

mum43rcc3#

这还不是一个直接的答案。只是一种帮助你解决问题的方法。
当容器运行时:

docker ps

查找进程id

docker exec -it theidgoeshere bash

这将使您在运行docker进程中获得bashshell。从那里可以检查正在运行的进程的日志文件。您可能没有可用的bash,但该命令非常有用。阅读这里:https://docs.docker.com/engine/reference/commandline/exec/
如果这是所有希腊然后我可以指给你一些更多的在线资料。

nhhxz33t

nhhxz33t4#

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

相关问题