connecttomcat与mysql在docker中的组合

lf5gs5x2  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(265)

我在研究这个项目。现在我正处于将项目转移到docker容器的阶段。我把tomcat放在我的网站上,mysql放在数据库docker-compose.yml上。不幸的是,来自tomcat的类无法连接到数据库

java代码

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. public class Waliduj {
  7. String url="jdbc:mysql://localhost:3306/uczelnia?useTimezone=true&serverTimezone=UTC";
  8. String username="root";
  9. String password="121212";
  10. public boolean Waliduje(String uname,String pass) {
  11. try {
  12. Class.forName("com.mysql.jdbc.Driver");
  13. Connection con = DriverManager.getConnection(url,username,password);
  14. PreparedStatement st=con.prepareStatement("SELECT email,haslo FROM logowanie WHERE email=? AND haslo=?");
  15. st.setString(1,uname);
  16. st.setString(2,pass);
  17. ResultSet rs = st.executeQuery();
  18. if(rs.next()) {
  19. return true;
  20. }
  21. } catch (SQLException e) {
  22. e.printStackTrace();
  23. } catch (ClassNotFoundException se) {
  24. // TODO Auto-generated catch block
  25. se.printStackTrace();
  26. }
  27. return false;
  28. }
  29. }

dockerfile代码

  1. FROM tomcat:8.0.41-jre8
  2. COPY ./webapp /usr/local/tomcat/webapps/webapp
  3. CMD ["catalina.sh", "run"]

docker-compose.yml代码

  1. version: '3'
  2. services:
  3. web:
  4. build: .
  5. ports:
  6. - "8080:8080"
  7. links:
  8. - "db:uczelnia"
  9. db:
  10. image: mysql
  11. environment:
  12. MYSQL_ROOT_PASSWORD: 121212
  13. MYSQL_DATABASE: uczelnia
  14. ports:
  15. - "3306:3306"
  16. PhpMyAdmin:
  17. image: nazarpc/phpmyadmin
  18. ports:
  19. - "8090:80"
  20. links:
  21. - db:mysql

错误代码

  1. web_1 | com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
  2. web_1 |
  3. web_1 | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  4. web_1 | at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:172)
  5. web_1 | at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
  6. web_1 | at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
  7. web_1 | at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
  8. web_1 | at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
  9. web_1 | at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
  10. web_1 | at java.sql.DriverManager.getConnection(DriverManager.java:664)
  11. web_1 | at java.sql.DriverManager.getConnection(DriverManager.java:247)
  12. web_1 | at com.login.walidacja.Waliduj.Waliduje(Waliduj.java:20)
  13. web_1 | at com.login.Login.doPost(Login.java:27)
  14. web_1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
  15. web_1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
  16. web_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
  17. web_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
  18. web_1 | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  19. web_1 | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
  20. web_1 | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
  21. web_1 | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
  22. web_1 | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
  23. web_1 | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
  24. web_1 | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
  25. web_1 | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
  26. web_1 | at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
  27. web_1 | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
  28. web_1 | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
  29. web_1 | at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
  30. web_1 | at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
  31. web_1 | at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
  32. web_1 | at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
  33. web_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  34. web_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  35. web_1 | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  36. web_1 | at java.lang.Thread.run(Thread.java:745)
  37. web_1 | Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
  38. web_1 |
  39. web_1 | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  40. web_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  41. web_1 | at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  42. web_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  43. web_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  44. web_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
  45. web_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103)
  46. web_1 | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:149)
  47. web_1 | at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165)
  48. web_1 | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:92)
  49. web_1 | at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
  50. web_1 | at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982)
  51. web_1 | at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
  52. web_1 | ... 30 more
  53. web_1 | Caused by: java.net.ConnectException: Connection refused (Connection refused)
  54. web_1 | at java.net.PlainSocketImpl.socketConnect(Native Method)
  55. web_1 | at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  56. web_1 | at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  57. web_1 | at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  58. web_1 | at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  59. web_1 | at java.net.Socket.connect(Socket.java:589)
  60. web_1 | at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:173)
  61. web_1 | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:66)
  62. web_1 | ... 33 more

其他信息:

我在windows 10上工作,所以docker也在windows上。
我为拼写错误道歉,但我来自波兰,所以英语不是我的母语

wn9m85ua

wn9m85ua1#

通过compose文件,您的数据库服务将通过 db . links关键字是不必要的,除非你只是需要一个不同的容器名称。如果您更改java代码以连接到 jdbc:mysql://db:3306/uczelnia?useTimezone=true&serverTimezone=UTC 它应该像预期的那样工作。
https://docs.docker.com/compose/networking/

相关问题