我目前正在Apache Tomcat Docker容器中运行一个WAR文件。war文件是一个Spring Boot应用程序。application.properties包含一个使用oracle jdbc6连接到数据库的连接。jar文件包含在Maven构建中。我继续收到500分。我可以在本地机器上运行相同的WAR文件,所有连接都可以正常工作。这就是为什么我假设它是因为码头集装箱上的开放港口。
sudo docker run -d -p 8080:8080 -p 1521:1521 --restart unless-stopped fd13ad9f3e16
我打开了1521的端口,但仍然无法访问数据库。
为了访问外部的OracleJDBC连接,我还需要在我的docker容器上运行什么吗?
因此,以下是我在AWS中采取的步骤,以确保这在JDBC连接的Tomcat Docker实例上有效。您不需要运行-p1521:1521,因为docker容器只是Tomcat实例,而不是Oracle的宿主。确保您设置了application.properties文件(下面是一个示例(
spring.datasource.url=jdbc:oracle:thin:@//< DNS name for RDS>:1521/<SID>
spring.datasource.username=<oracle db username>
spring.datasource.password=< oracle db password for username>
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#hibernate config
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
#spring.data.rest.base-path=/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>)))'