Как подключиться к внешней базе данных Oracle в Docker - PullRequest
2 голосов
/ 02 марта 2020

Я пытаюсь подключиться к базе данных Oracle, которая находится вне контейнера docker. Я новичок в Docker и не знаю, как добиться того же. На моем локальном компьютере я могу подключиться к указанной c базе данных, указав имя хоста, имя службы и порт или просто сославшись на запись, указанную в файле tnsnames.ora. Я установил Docker на мою Windows 10 машину. Моей конечной целью является потоковая передача моих таблиц на kafka topi c с использованием ksqlDB. Но первым шагом является подключение к моей базе данных oracle. Я не уверен, какие изменения или настройки требуются для подключения к любому внешнему источнику базы данных из Docker. Я попробовал ниже конфигурацию разъема, но это не работает.

Конфигурация разъема:

CREATE SOURCE CONNECTOR jdbc_source WITH(
'connector.class'       =   'io.confluent.connect.jdbc.JdbcSourceConnector',
'connection.url'        =   'jdbc:oracle:thin://dv11-db.com:1521/dv11.db.com',
'connection.user'       =   'user',
'connection.password'   =   'password',
'topic.prefix'          =   'jdbc_',
'mode'                  =   'bulk',
'table.whitelist'       =   'batch_driver'
);

Ошибки:

{
  "error_code" : 400,
  "message" : "Connector configuration is invalid and contains the following 2 error(s):\nInvalid value java.sql.SQLException: No suitable driver
found for jdbc:oracle:thin://dv11-db.com:1521/dv11.db.com for configuration Couldn't open connection to jdbc:oracle:thin://dv11-db.com:1521/dv11.db.com\nInvalid value java.sql.SQLException: No suitable driver found for jdbc:oracle:thin://dv11-db.com:1521/dv11.db.com for configuration Couldn't open connection to jdbc:oracle:thin://dv11-db.com:1521/dv11.db.com\nYou can also find the above list of errors at the endpoint `/{connectorType}/config/validate`"
}

Oracle Конфигурация:

(DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = dv11-db.com)(PORT = 1521))    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = dv11.db.com)))

Docker -compose.yml

---
version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-enterprise-kafka:latest
    hostname: broker
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

  ksqldb-server:
    image: confluentinc/ksqldb-server:0.7.0
    hostname: ksqldb-server
    container_name: ksqldb-server
    depends_on:
      - broker
    ports:
      - "8088:8088"
    environment:
      KSQL_LISTENERS: http://0.0.0.0:8088
      KSQL_BOOTSTRAP_SERVERS: broker:9092
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"
      KSQL_KSQL_CONNECT_WORKER_CONFIG: "/connect/connect.properties"
      KSQL_CONNECT_GROUP_ID: "ksql-connect-cluster"
      KSQL_CONNECT_BOOTSTRAP_SERVERS: "broker:9092"
      KSQL_CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.storage.StringConverter"
      KSQL_CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      KSQL_CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "false"
      KSQL_CONNECT_CONFIG_STORAGE_TOPIC: "ksql-connect-configs"
      KSQL_CONNECT_OFFSET_STORAGE_TOPIC: "ksql-connect-offsets"
      KSQL_CONNECT_STATUS_STORAGE_TOPIC: "ksql-connect-statuses"
      KSQL_CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      KSQL_CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      KSQL_CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      KSQL_CONNECT_PLUGIN_PATH: "/usr/share/kafka/plugins"
  volumes:
      - ./confluentinc-kafka-connect-jdbc-5.4.0:/usr/share/kafka/plugins/jdbc 

  ksqldb-cli:
    image: confluentinc/ksqldb-cli:0.7.0
    container_name: ksqldb-cli
    depends_on:
      - broker
      - ksqldb-server
    entrypoint: /bin/sh
    tty: true

1 Ответ

1 голос
/ 02 марта 2020

java. sql .SQLException: Нет подходящего драйвера

Не проблема docker. Вы не поместили драйвер базы данных в нужное место

Оно не должно go в /usr/share/kafka/plugins/jdbc.

Это должно go в /usr/share/kafka-connect-jdbc

См. https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-connector/

На моей локальной машине я могу подключиться к c базы данных, указав имя хоста, имя службы и порт или просто сославшись на запись, указанную в файле tnsnames.ora

Непонятно, как вы подключаетесь ... Из кода? Из какого-то Oracle инструмента?

Если ваша база данных находится на другом сервере, сетевое соединение Docker должно работать точно так же. Вам все еще нужно настроить драйверы

...