首页 文章

Docker - Spring Boot JPA(在Docker中)MySQL(在Docker之外)

提问于
浏览
2

我是Docker的新手 . 尝试用一个小例子来理解这些概念 . 目前,我有SpringBoot REST JPA(8080端口)MySQL服务器(3306端口) . 工作得非常好(没有码头 Worker ) .

我想在Docker容器中部署Spring Boot REST JPA,MySQL应该保留在Docker引擎之外,它应该保持在同一个localhost:3306端口运行 .

作为一个开始,创建一个没有JPA的简单HelloWorld应用程序,能够容器化 . 并且能够从RESTful URL获取输出 . 现在棘手的部分启动MySQL服务器3306并将数据库凭证添加到Hello World代码,再次构建并运行docker . 我猜它无法找到localhost:3306?请建议如何使这项工作?我不想把MySQL服务器容器化 .

SpringBoot application.properties文件:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Dokerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} demo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo-0.0.1-SNAPSHOT.jar"]

错误:

2018-05-28 08:24:28.897  INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-05-28 08:24:28.898  INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2962 ms
2018-05-28 08:24:29.250  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-05-28 08:24:29.260  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-05-28 08:24:29.587  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-05-28 08:24:30.811 ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_151]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_151]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_151]

谢谢 .

1 回答

  • 0

    docker ontainer通常在单独的网络命名空间中运行 . 这意味着,例如 localhost 指的是在其中运行的进程的容器 .

    要解决此问题,您需要更新连接字符串:

    spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false
    

    这样它就会产生一个有效的连接 . 此外,还有几种网络选项可用于各种场景 . https://docs.docker.com/network/

    如果这仅用于本地开发,最简单的可能是使用 host 网络,但这可能不是您在 生产环境 环境中所需的设置 .

相关问题