mysql docker容器的JDBC Communications链接失败

rsd*_*dev 9 mysql jdbc docker

当我的java spring应用程序尝试连接到数据库时,我得到以下信息:

Caused by: 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.
Run Code Online (Sandbox Code Playgroud)

spring应用程序中的连接URL如下:

jdbc:mysql:// mysqldbserver:3306 / supersede_orchestrator_spring?useSSL = false&autoReconnect = true&failOverReadOnly = false&maxReconnects = 10

其中mysqldbserver是docker-compose配置中的服务名称:

version : '3'
services:
  springappserver:
    build:
      context: .
      dockerfile: web.dockerfile
    ports:
      - "8081:8080"
    networks:
      - mt-network
    volumes:
      - .:/vol/development
    depends_on:
      - mysqldbserver
  mysqldbserver:
    build:
      context: .
      dockerfile: db.dockerfile
    ports:
      - "13306:3306"
    networks:
      - mt-network
    environment:
      MYSQL_DATABASE: supersede_orchestrator_spring
      MYSQL_USER: supersede_orch
      MYSQL_PASSWORD: ****
      MYSQL_ROOT_PASSWORD: ****
    container_name: orchestrator_mysqldbserver
networks:
  mt-network:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

在mysql docker容器中,我已经将bind-address调整为0.0.0.0。supersede_orch用户的特权设置为%。当我连接到springappserver docker容器时,我可以通过telnet mysqldbserver 3306到达数据库,也可以在命令行上从spring docker容器连接数据库:mysql -h mysqldbserver -u supersede_orch -p。尽管java spring应用程序无法连接到在另一个docker容器上运行的数据库。

web.dockerfile如下所示:

FROM java:8-jre

VOLUME /tmp
ADD build/libs/feedback_orchestrator-2.0.0.jar app.jar

RUN apt-get update
RUN apt-get install mysql-client -y
RUN apt-get install libmysql-java -y

RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true","-jar","/app.jar"]
Run Code Online (Sandbox Code Playgroud)

因此,我试图确保java使用IP4解析mysqldbserver(我也使用了mysqldbserver的相应IP地址,但同样失败了)。

最后docker images -a:

42db4e656e6e        orchestrator_springappserver   "java '-Djava.secu..."   16 minutes ago      Up 16 minutes             0.0.0.0:8081->8080/tcp    orchestrator_springappserver_1
e2b0b5cc15ac        orchestrator_mysqldbserver     "docker-entrypoint..."   2 hours ago         Up About an hour          0.0.0.0:13306->3306/tcp   orchestrator_mysqldbserver
Run Code Online (Sandbox Code Playgroud)

您知道可能是什么问题吗?谢谢!

rsd*_*dev 5

上面的配置是正确的。我只是愚蠢到忘记重建罐子。因此,jdbc url 未更新。现在效果很好。