我是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 回答
docker ontainer通常在单独的网络命名空间中运行 . 这意味着,例如
localhost
指的是在其中运行的进程的容器 .要解决此问题,您需要更新连接字符串:
这样它就会产生一个有效的连接 . 此外,还有几种网络选项可用于各种场景 . https://docs.docker.com/network/
如果这仅用于本地开发,最简单的可能是使用
host
网络,但这可能不是您在 生产环境 环境中所需的设置 .