我是Docker的新手,正在尝试将运行在我的 引导示例 docker 容器中的spring boot应用程序连接到一个运行在端口6603上的 mymysql docker 容器中的mysql服务器,两者均在同一台物理计算机上运行。事实是:如果我将spring-boot应用程序连接到 mymysql docker 容器以便与数据库通信,则 不会出现任何错误,并且一切正常。
当 我将spring boot应用程序移动 到 boot-example 容器中并尝试(通过Hibernate)与 mymysql 容器通信时,出现以下错误:
2018-02-05 09:58:38.912 ERROR 1 --- [ main] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool. 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_111]
我的Spring Bootapplication.properties是:
server.port=8083 spring.jpa.hibernate.ddl-auto=create-drop spring.datasource.url=jdbc:mysql://localhost:6603/mydockerdb spring.datasource.username=root spring.datasource.password=mypassword
在我的Spring Boot应用在端口8082上的Docker容器中运行之前,它工作正常(在正确构建Docker映像之后):
docker run -it -p 8082:8083 boot-example
按照上面的建议,Docker-compose是一种方法,但是如果您不想使用组合/组合模式。
docker network create myNet
--network myNet
jdbc:mysql://mymysql:6603/mydockerdb
通过使用docker demon的DNS解析,容器可以相互发现并进行通信。[默认网桥不支持DNS。使用网桥的用户定义网络。]
有关更多信息:https : //docs.docker.com/engine/userguide/networking/