spring-boot - Dockerized Spring Boot 应用程序无法连接到数据库容器
问题描述
我有一个带有 gradle 和 Hibernate 的基本 Spring Boot 应用程序,它调用 Oracle 数据库,该数据库位于 docker 容器中。
我使用插件“com.google.cloud.tools.jib”并使用以下命令创建了 Spring Boot 应用程序的 Docker 映像:
./gradlew jibDockerBuild --image=app1
我已经创建了一个用户定义的网络(我们称之为my_network),并且我已经将数据库容器附加到上述网络。
我有一个 docker 文件,即使我将图像指定为服务并在运行时使用my_network我在 CMD 中点击“docker-compose up”命令,我也会收到以下异常:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
docker-compose 文件如下:
version: '3.7'
networks:
my_network:
external:
name: my_network
services:
app1:
image: "app1"
ports:
- "9090:9090"
environment:
SPRING_DATASOURCE_URL: "jdbc:oracle:thin:@localhost:32769/ORCLPDB1.localdomain"
SPRING_DATASOURCE_USERNAME: username
SPRING_DATASOURCE_PASSWORD: password
networks:
- my_network
尝试了解决方案但没有结果:
- 将数据库指定为服务,所以基本上让它在我第一次点击“docker-compose up”时创建,并且在服务 app1 中指定了标签depends_on,但创建的数据库容器将处于健康状态:在 app1 启动很久之后的启动状态,并且坠毁
- 让网络从 docker-compose 文件内部创建,但行为与所问问题相同
- 在数据库 url 中将localhost 替换为host.docker.internal但它说是未知主机
解决方案
在您的 Docker-compose 文件中。创建 Oracle 数据库容器,然后创建 API 容器,如下所示
version: '3.7'
services:
oracle-database:
image: Your oracleImage
environment:
//define your oracle db settings..eg default password,users etc
volumes:
- /data/oracle
ports:
- 127.0.0.1: 32769:32769/tcp
api1:
image: api1
ports:
- 127.0.0.1:9090:9090/tcp
depends_on:
- oracle-database
environment:
- DATABASE_HOST=oracle-database
- DATABASE_USER= username
- DATABASE_PASSWORD=password
- DATABASE_NAME= NameOfYourDatabase
- DATABASE_PORT= 32769
推荐阅读
- reactjs - 有什么办法可以让这变得更好吗?上传多个图像并将它们链接到 firestore db 对象
- javascript - 移动到其他月份时如何增加日期
- jquery - Drupal 7:自动加载下一篇文章
- javascript - 打字稿/Vue3 - 强制使用类型“任何”
- amazon-web-services - AWS 简单电子邮件服务为 XSS 转义用户输入
- wordpress - 我应该如何将 woocommerce_coupon_is_valid 过滤器用于弹出脚本标签?
- node.js - Google auth0 一键登录未正确发送数据
- node.js - 使用 Typescript 创建类默认 api Restful nodejs
- bash - 来自 bash 的 aws cli 命令与 jq 从日志存储桶失败中获取 S3 日志
- ssh - 无法使用 ssh 连接