mysql - 如何在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
选项也已弃用。
解决方案
您需要将这两个容器保持在同一个网络中。考虑在同一网络中配置以下 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 的网络,其主体为空。我还在每个容器配置中添加了一个网络部分,并为该特定容器提供了一个别名。
通过使用给定的别名作为主机名,两个容器将能够相互通信。
推荐阅读
- dependencies - Elixir 依赖项中的版本
- batch-file - 存储数据并使用它来选择一个选项
- javascript - CSS按视口反转图像高度
- forms - symfony DateType 表单字段可以允许其他格式吗?
- ruby-on-rails - 在 postgres rails 中为 Enum 类型添加额外的值
- c# - 使用带有 DateTime.AddDays 参数的自定义方法
- javascript - 如何将承诺的结果作为字符串返回?
- php - 什么 PHP 函数来解析这个时间戳 42866.32972
- java - 字符串数组中的第一个唯一字符串
- java - 由于 RunTimeException,RecyclerView Espresso 测试失败