我有一个使用mysql数据库的javahibernatemvc web应用程序。它在我的电脑上运行良好,但当我尝试使用docker容器运行它时就不起作用了。我正在windows home上使用docker工具箱,因为最新版本的docker需要windows professional。-------请忽略我下面代码片段中的类、函数和数据库名称,我很快更改了名称以保持匿名性。我仔细核实过,实际上所有的名字都是正确的
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 .
docker network create -d bridge my-network
docker run -p 3306:3306 --network=my-network --name no-visit -itd my-mysqldb
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
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)
mum43rcc3#
这还不是一个直接的答案。只是一种帮助你解决问题的方法。当容器运行时:
查找进程id
docker exec -it theidgoeshere bash
这将使您在运行docker进程中获得bashshell。从那里可以检查正在运行的进程的日志文件。您可能没有可用的bash,但该命令非常有用。阅读这里:https://docs.docker.com/engine/reference/commandline/exec/如果这是所有希腊然后我可以指给你一些更多的在线资料。
nhhxz33t4#
问题解决了。我运行的.sql脚本中的数据库名称被证明是错误的。
4条答案
按热度按时间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
.xoshrz7s2#
我在一个容器中有一个在tomcat上运行的mvcweb应用程序,在另一个容器中有一个mysql数据库。我认为我的应用程序可以连接到数据库,因为我能够将web应用程序中的主页毫无错误地加载到docker容器中。但是,当我尝试在一个mysql表中放入某些内容时,会出现以下错误:
mum43rcc3#
这还不是一个直接的答案。只是一种帮助你解决问题的方法。
当容器运行时:
查找进程id
这将使您在运行docker进程中获得bashshell。从那里可以检查正在运行的进程的日志文件。您可能没有可用的bash,但该命令非常有用。阅读这里:https://docs.docker.com/engine/reference/commandline/exec/
如果这是所有希腊然后我可以指给你一些更多的在线资料。
nhhxz33t4#
问题解决了。我运行的.sql脚本中的数据库名称被证明是错误的。