小编典典

两个Docker容器之间的通讯出现问题

spring-boot

我是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

阅读 690

收藏
2020-05-30

共1个答案

小编典典

按照上面的建议,Docker-compose是一种方法,但是如果您不想使用组合/组合模式。

  1. 只需使用以下内容创建您自己的网络 docker network create myNet
  2. 部署容器以侦听创建的网络 --network myNet
  3. 将您的spring.datasource.url更改为 jdbc:mysql://mymysql:6603/mydockerdb

通过使用docker demon的DNS解析,容器可以相互发现并进行通信。[默认网桥不支持DNS。使用网桥的用户定义网络。]

有关更多信息:https :
//docs.docker.com/engine/userguide/networking/

2020-05-30