无法从微服务的docker容器连接到端口3306的mysql服务器

问题描述 投票:0回答:1

我创建了一个 docker-comose 文件,其中包含有关数据库和微服务的所有强制信息,并且在运行 docker compose up 命令后,即使我的数据库映像运行成功,我的微服务实例也无法与它们连接并返回通信链接错误,我尝试了很多方法,但错误仍然存在。

请从下面的代码中提出更好的方法:

common.config.yml
services:
  network-deploy-service:
    networks:
      - xyz

  microservice-db-config:
    extends:
      service: network-deploy-service
    image: mysql
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      timeout: 10s
      retries: 10
      interval: 10s
      start_period: 10s
    environment:
      MYSQL_ROOT_PASSWORD: root

  microservice-base-config:
    extends:
      service: network-deploy-service
    deploy:
      resources:
        limits:
          memory: 700m

docker-compose.yml
services:
  accountsdb:
    container_name: accountsdb
    ports:
      - 3307:3306
    environment:
      MYSQL_DATABASE: accountsdb
    extends:
      file: common-config.yml
      service: microservice-db-config

  loansdb:
    container_name: loansdb
    ports:
      - 3308:3306
    environment:
      MYSQL_DATABASE: loansdb
    extends:
      file: common-config.yml
      service: microservice-db-config

  cardsdb:
    container_name: cardsdb
    ports:
      - 3309:3306
    environment:
      MYSQL_DATABASE: cardsdb
    extends:
      file: common-config.yml
      service: microservice-db-config

  accounts:
    image: "xyz/accounts"
    container_name: accounts-ms
    ports:
      - "8080:8080"
    environment:
      SPRING_APPLICATION_NAME: "accounts"
      SPRING_DATASOURCE_URL: "jdbc:mysql://accountsdb:3306/accountsdb"
    depends_on:
      accountsdb:
        condition: service_healthy

  loans:
    image: "xyz/loans"
    container_name: loans-ms
    ports:
      - "8090:8090"
    environment:
      SPRING_APPLICATION_NAME: "loans"
      SPRING_DATASOURCE_URL: "jdbc:mysql://loansdb:3306/loansdb"
    depends_on:
      loansdb:
        condition: service_healthy

  cards:
    image: "xyz/cards"
    container_name: cards-ms
    ports:
      - "9000:9000"
    environment:
      SPRING_APPLICATION_NAME: "cards"
      SPRING_DATASOURCE_URL: "jdbc:mysql://cardsdb:3306/cardsdb"
    depends_on:
      cardsdb:
        condition: service_healthy

networks:
  xyz:
    driver: "bridge"
mysql docker docker-compose
1个回答
0
投票

您的数据库位于

xyz
网络上,但您的应用程序容器不在。我不认为定义自己的网络比使用 compose 创建的默认桥接网络有任何好处,因此我只需删除
xyz
网络并为所有容器使用默认网络。

所以而不是

  microservice-db-config:
    extends:
      service: network-deploy-service
    image: mysql
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      timeout: 10s
      retries: 10
      interval: 10s
      start_period: 10s
    environment:
      MYSQL_ROOT_PASSWORD: root

只需使用

  microservice-db-config:
    image: mysql
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      timeout: 10s
      retries: 10
      interval: 10s
      start_period: 10s
    environment:
      MYSQL_ROOT_PASSWORD: root
© www.soinside.com 2019 - 2024. All rights reserved.