#oracle #docker #containers
#Oracle #docker #контейнеры
Вопрос:
У меня проблемы с доступом к контейнеру докеров базы данных Oracle XE (версия 2.3.0.4) через Telnet или SQLPLUS из моей хост-системы:
Это моя конфигурация Oracle XE и контейнера:
docker port 54cb9336d8c3
1521/tcp -> 127.0.0.1:1521
Конфигурация Oracle:
cat /opt/oracle/product/18c/dbhomeXE/network/admin/listener.ora
DEFAULT_SERVICE_LISTENER = XE
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
cat /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
вывод lsnrctl:
lsnrctl status
LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 05-SEP-2020 13:29:49
Copyright (c) 1991, 2018, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 18.0.0.0.0 - Production
Start Date 04-SEP-2020 23:23:29
Uptime 0 days 14 hr. 6 min. 20 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /opt/oracle/product/18c/dbhomeXE/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/54cb9336d8c3/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/XE/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "XE" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "ae7e9c04366c09a3e053030011ac556e" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "xepdb1" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully
Я могу получить доступ через SQLPLUS из контейнера Docker к базе данных XE через SQLPLUS, но подключиться к БД из моей хост-системы невозможно.
Telnet к порту 1521 (в контейнере Docker)
[root@54cb9336d8c3 admin]# telnet localhost 1521
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Telnet к порту 1521 (с хоста macOS)
telnet localhost 1521
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Я что-то пропустил в конфигурации Oracle DB или контейнера Docker?
Ответ №1:
Прошло некоторое время с тех пор, как я настроил Oracle DB, но мне кажется, что ваш слушатель настроен только на прослушивание интерфейса обратной связи.
Вместо этого вам следует попробовать эту конфигурацию:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
Для сравнения, вот listener.ora
из официального образа докера Oracle Database Enterprise Edition:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
DIAG_ADR_ENABLED = off
SSL_VERSION = 1.0
и tnsnames.ora
из того же образа:
ORCLCDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCLCDB.localdomain) ) )
ORCLPDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCLPDB1.localdomain) ) )