无法从本地计算机上运行的docker容器连接到oracle数据库

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

我有一个 Spring Boot 应用程序在本地计算机上作为 docker 容器运行。它正在连接到我们公司数据中心上的 Oracle 数据库。我可以使用 sql Developer 直接从本地计算机连接到数据库。但是,作为 docker 容器运行的 spring 应用程序在连接到数据库时出现以下错误。我确信它必须在 docker 容器中执行与端口映射或网络相关的操作。

原因:oracle.net.ns.NetException:网络适配器无法建立连接

oracle spring-boot docker containers
1个回答
0
投票

您的数据库容器已映射到主机网络上的端口 1521。这就是为什么

SQL Developer
可以使用这样的东西:
localhost:1521/SERVICE_NAME
SQL Developer 只能访问主机网络,并且端口 1521 暴露给主机网络。

现在,您希望应用程序容器连接到数据库容器。 应用程序容器无法访问主机网络(除非配置为主机模式),它只能访问 docker 网络,如

172.17.0.2/16

解决方案

在docker-network中查找数据库容器的ip:

docker container inspect free-23ai | grep '"IPAddress":'
        "IPAddress": "",
                "IPAddress": "172.21.0.2",

现在,您可以为您的应用程序构建连接字符串。

172.21.0.2:1521/SERVICE_NAME

提示

在有服务发现的地方使用docker compose更方便

services:
  app:
  db:

现在您可以像这样配置您的应用程序:

db:1521/SERVICE_NAME
或只是
db/SERVICE_NAME
(1521是默认值,可以省略)

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.