如何使用托管在Tomcat上的Spring boot应用程序通过JDBC从Docker容器访问Oracle AWS RDS

如何使用托管在Tomcat上的Spring boot应用程序通过JDBC从Docker容器访问Oracle AWS RDS,spring,oracle,amazon-web-services,docker,jdbc,Spring,Oracle,Amazon Web Services,Docker,Jdbc,我目前正在ApacheTomcat Docker容器中运行一个WAR文件。war文件是一个Spring引导应用程序。属性包含使用oracle jdbc6连接到数据库的连接。jar文件包含在Maven构建中。我继续收到一张500英镑的支票。我可以在本地机器上运行相同的WAR文件,所有连接都可以正常工作。这就是为什么我假设它是因为docker容器上的开放端口 sudo docker run -d -p 8080:8080 -p 1521:1521 --restart unless-stopped

我目前正在ApacheTomcat Docker容器中运行一个WAR文件。war文件是一个Spring引导应用程序。属性包含使用oracle jdbc6连接到数据库的连接。jar文件包含在Maven构建中。我继续收到一张500英镑的支票。我可以在本地机器上运行相同的WAR文件,所有连接都可以正常工作。这就是为什么我假设它是因为docker容器上的开放端口

sudo docker run -d -p 8080:8080 -p 1521:1521  --restart unless-stopped fd13ad9f3e16
我为1521打开了端口,但仍然无法访问数据库


为了访问外部的Oracle JDBC连接,我还需要在docker容器上运行其他任何东西吗?

下面是我在AWS中采取的步骤,以确保这在我的Tomcat docker实例上运行。 您不需要运行-p 1521:1521,因为docker容器只是一个Tomcat实例,不承载Oracle。 确保设置了application.properties文件(下面是一个示例)

spring.datasource.url=jdbc:oracle:thin:@/:1521/
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver类名=oracle.jdbc.OracleDriver
#休眠配置
spring.jpa.database platform=org.hibernate.dialen.oracle10galent
#spring.data.rest.base路径=/api
spring.data.rest.default-page-size:20
接下来,确保您的RDS安全组已设置为允许EC2实例的特定IP地址。我不建议向所有人开放

接下来,确保为1521打开EC2实例的安全组

应该是这样。我遇到的问题是没有为我的EC2实例专门配置RDS安全组

您还可以使用Oracle的RPM软件包安装SQLplus,以测试您的连接。 命令示例如下:

sqlplus '<username>/<password>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<aws DNS name>)(Port=1521))(CONNECT_DATA=(SID=<name of SID>)))'
sqlplus'/@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=)(Port=1521))(CONNECT_DATA=(SID=))

您是指JDBC而不是ODBC(以及ojdbc6而不是odbc6),因为您不应该(在最新版本中:不能)使用Java中的ODBC。您还需要提供更多信息,包括异常、相关代码和实际设置(例如:我并不认为Oracle服务器与您的应用程序处于同一个docker映像中,因此,
-p 1521:1521
的存在对我来说没有多大意义。@MarkrotVeel您是对的。我使用的是ojdbc6,是的,我指的是jdbc,是的,我的docker容器是一个Redhat linux容器,其中部署了一个war文件。我将更改我的问题。我的数据库是AWS RDS oracle数据库。
sqlplus '<username>/<password>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<aws DNS name>)(Port=1521))(CONNECT_DATA=(SID=<name of SID>)))'