【问题标题】:App container cannot connect to mysql container in the same network应用容器无法连接到同一网络中的 mysql 容器
【发布时间】:2021-10-29 10:10:41
【问题描述】:

我遇到了一个问题,即 docker 和容器化应用程序未连接到在同一 docker 网络中的容器中运行的 mysql 数据库。我的docker-compose.yml 看起来像这样:

version: '3.8'

services:

  mysqlserver:
    image: mysql:5.7.24
    container_name: mysql_app
    networks:
      - somenetwork
    ports:
      - "5647:3306"
    environment:
      MYSQL_DATABASE: database
      MYSQL_USER: USER
      MYSQL_PASSWORD: PASS
      MYSQL_ROOT_PASSWORD: PASS
    command:
      - --max_connections=1000
    restart: always
    volumes:
     - persistent:/var/lib/mysql

  app:
    image: app/appserver:latest
    container_name: app_server
    networks:
      - somenetwork
    ports:
      - "8080:8080"
    depends_on:
      - mysqlserver
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysqlserver:5647/database?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true

networks:
  somenetwork:
    name:
      somenetwork_share_net

volumes:
  persistent:

查看应用容器中的日志,我发现如下错误:

原因:com.mysql.cj.exceptions.CJCommunicationsException:通信链路故障 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有收到服务器发来的任何数据包。

原因:java.net.ConnectException:连接被拒绝(连接被拒绝) 在 java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]

我的docker-compose.yml 有问题吗?为什么应用容器无法连接

【问题讨论】:

    标签: java mysql spring docker


    【解决方案1】:

    您必须使用容器端的暴露端口3303 而不是公共端口5647

    试试吧

    SPRING_DATASOURCE_URL: jdbc:mysql://mysqlserver:3306/database?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true
    

    本地网络中的端口保持原来的暴露端口。在端口部分,您只需定义主机上的公共端口。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2020-01-20
      • 2020-02-25
      • 2020-04-17
      • 2020-12-30
      相关资源
      最近更新 更多