如何解决连接到Oracle XE Docker容器
我无法通过Telnet或SQLPLUS从主机系统访问Oracle XE数据库Docker容器(版本2.3.0.4):
这是我的Oracle XE和Container配置:
for j in range(3):
p = multiprocessing.Process(target = functions_that_hangs,args = (arguments,))
p.start()
p.join(180)
if p.is_alive: # used to check if process is still runing
p.terminate()
if p.exitcode >= 0 : # used to check if process completed successfully
break
Oracle配置:
docker port 54cb9336d8c3
1521/tcp -> 127.0.0.1:1521
lsnrctl输出:
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))
我可以通过SQLPLUS从Docker容器访问XE数据库,但是无法从主机系统连接到DB。
Telnet到端口1521(在Docker容器中)
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",has 1 handler(s) for this service...
Service "ae7e9c04366c09a3e053030011ac556e" has 1 instance(s).
Instance "XE",has 1 handler(s) for this service...
Service "xepdb1" has 1 instance(s).
Instance "XE",has 1 handler(s) for this service...
The command completed successfully
Telnet到端口1521(从macOS主机)
[root@54cb9336d8c3 admin]# telnet localhost 1521
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
我是否错过了Oracle DB或Docker容器的配置?
解决方法
自从配置Oracle DB以来已经有一段时间了,但是在我看来,您已将侦听器设置为仅在回送接口上侦听。
您应该尝试以下配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
为进行比较,这是来自Oracle数据库企业版官方Docker映像的listener.ora
:
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) ) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。