首页 > 解决方案 > 如何在docker compose中将spring app与mysql通信?

问题描述

尽管我已经初步管理 Spring boot docker 服务以在 mysql docker 服务之后启动,但应用程序仍然存在通信链接故障。我不知道还能做什么,我现在尝试了太多东西。

我的码头工人撰写:

version: '3'
services:
  mysql:
    container_name: hernidb
    image: mysql
    volumes:
     - "./waitForMySQL.sh:/usr/local/bin/waitForMySQL.sh"
    ports:
      - '3306:3306'
    environment:
      USER: 'root'
      MYSQL_ROOT_PASSWORD: 'rida'
    restart: always
  app:
    container_name: herniemp
    restart: always
    build: ./EmployeeService
    working_dir: /app
    volumes:
      - ./EmployeeService:/app
      - ~/.m2:/root/.m2
    ports:
      - '8080:8080'
    command: bash -c "sleep 120 && mvn clean spring-boot:run -Dspring-boot.run.profiles=dev"
    depends_on:
      - mysql

我知道这sleep 120是可耻的,但是将脚本放在卷属性中,它给了我一个权限被拒绝的消息。该link选项也已弃用。

标签: mysqlspring-bootdocker-compose

解决方案


您需要将这两个容器保持在同一个网络中。考虑在同一网络中配置以下 docker 文件:

version: '3'
services:
  mysql:
    container_name: hernidb
    image: mysql
    volumes:
     - "./waitForMySQL.sh:/usr/local/bin/waitForMySQL.sh"
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD:rida
    networks:
      movie-quote-network:
        aliases:
          - herni-database
    restart: always
  app:
    container_name: herniemp
    restart: always
    build: ./EmployeeService
    working_dir: /app
    networks:
      movie-quote-network:
        aliases:
          - herni-service
    volumes:
      - ./EmployeeService:/app
      - ~/.m2:/root/.m2
    ports:
      - '8080:8080'
    command: bash -c "sleep 120 && mvn clean spring-boot:run -Dspring-boot.run.profiles=dev"
    depends_on:
      - mysql

networks:
  herni-network:

如您所见,我们在底部定义了一个名为 herni-network 的网络,其主体为空。我还在每个容器配置中添加了一个网络部分,并为该特定容器提供了一个别名。

通过使用给定的别名作为主机名,两个容器将能够相互通信。


推荐阅读