mysql - docker-compose 与 Spring Boot 和 MySQL 集成不断发生错误通信链接失败
问题描述
我即将完成我的春季启动项目。
但是,使用 docker-compose 的部署只是痛苦地不起作用
下面是我的代码
码头工人-compose.yml
version: '3'
services:
ibin-db:
container_name: ibin-db
image: mysql:5.7
environment:
MYSQL_DATABASE: iBinApiDB
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
ports:
- 3306:3306
ibin-inplay:
image: openjdk:14
volumes:
- ./run.sh:/home/ibin/run.sh
- ./ibin-inplay/build/libs:/home/ibin/libs
ports:
- 8001:8080
- 16100:16100
networks:
vpcbr:
ipv4_address: 192.168.219.69
depends_on:
- ibin-db
command: bash -c "cd /home/ibin && sh run.sh"
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 192.168.219.0/24
应用程序.yml
spring:
datasource:
url: jdbc:mysql://ibin-db:3306/iBinApiDB?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.MySQL5Dialect
generate-ddl: true
不错过运行 ./gradlew bootJar
但是,无论如何都会弹出错误。
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
请帮我解决这个问题。
解决方案
这两个容器不在同一个 Docker 内部网络上,所以它们不能互相看到。容器被ibin-inplay
显式分配给vpcbr
网络;容器ibin-db
没有任何手动networks:
配置,因此 Compose 将其分配给default
网络。 Compose 中的网络描述了 Compose 将自动为您创建的内容。
您不需要手动为容器分配 IP 地址或以其他方式在 Docker 中进行手动网络配置。我建议删除networks:
整个文件中的所有块(顶级块和ibin-inplay
容器块)并在default
任何地方使用网络。
推荐阅读
- c# - 重新加载场景后,GameObject.Find 在 Android 构建中不起作用
- javascript - 有没有办法阻止用户在他/她至少移动滑块(输入类型=范围)之前提交表单?
- mysql - mysql多个相似表查询[好像不重复]
- java - 如何通过另一个类的分组来打印一个类中的数组列表?
- android - Android Studio 3.3 错误
- python-3.x - Scrapy 蜘蛛不返回任何项目数据
- sql - Cycles 表(为每个更改创建行)
- typescript - 为什么字符串与这种联合类型冲突?
- javascript - 结合英文、日文和中文字母的正则表达式
- oracle - $$LAST_EXTRACT_DATE 不在 informatica 映射的参数文件中 - 通过 DAC 运行时