Как получить доступ к Oracle AWS RDS через JDBC из контейнера Docker с приложением загрузки Spring, размещенным на Tomcat

В настоящее время я запускаю файл WAR в контейнере Apache Tomcat Docker. Файл 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, но все еще не могу получить доступ к базе данных.

Есть ли что-нибудь еще, что мне нужно запустить в моем контейнере докеров, чтобы получить доступ к соединению Oracle JDBC извне?

Вы имеете в виду JDBC вместо ODBC (и ojdbc6 вместо odbc6), потому что вам не следует (а в последних версиях: нельзя) использовать ODBC из Java. Вы также захотите предоставить дополнительную информацию, включая исключения, соответствующий код и фактическую настройку (например: я на самом деле не думаю, что сервер Oracle находится в том же образе докера, что и ваше приложение, поэтому наличие -p 1521:1521 не имеет большого значения. смысл мне.

Mark Rotteveel 02.11.2018 10:14

@markrotteveel Вы правы. Я использую ojdbc6, да, я имел в виду jdbc, и да, мой контейнер докеров - это контейнер Redhat linux с tomcat, на котором размещен развернутый файл войны. Внесу изменения в свои вопросы. И моя база данных - это база данных оракула AWS RDS.

Kevin Summersill 02.11.2018 11:49
1
2
852
1

Ответы 1

Итак, вот шаги, которые я предпринял в AWS, чтобы убедиться, что это работает на моих экземплярах Tomcat Docker для подключения JDBC. Вам не нужно запускать -p 1521: 1521, поскольку контейнер докеров - это только экземпляр 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 настроена на разрешение определенного IP-адреса ваших экземпляров EC2. Я бы не рекомендовал открываться всем.

Затем обязательно откройте группу безопасности для экземпляра EC2 для 1521.

Так и должно быть. Проблема, с которой я столкнулся, заключалась в том, что группа безопасности RDS не была специально настроена для моего экземпляра EC2.

Вы также можете установить SQLplus, используя пакеты RPM от Oracle, чтобы проверить свое соединение. Пример команды:

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

Другие вопросы по теме