【发布时间】:2023-01-04 03:23:11
【问题描述】:
我正在尝试在 OCI Ampere 节点上运行打包在 Docker 容器中的 Python 应用程序。
环境:
- 基本图像:
python:3.10.9-slim使用buildx构建arm64 - 客户端库:
oracledb==1.2.1 - Docker 版本:
20.10.22, build 3a2c30b - Docker 主机操作系统:
5.4.17-2136.311.6.1.el8uek.aarch64
但是,当应用程序尝试使用瘦客户端连接到自治事务处理数据库时,它返回以下错误:
File "/app/utils/db_connection_managers/oracle_connection_manager.py", line 13, in __init__
self.db_conn = oracledb.connect(
File "/usr/local/lib/python3.10/site-packages/oracledb/connection.py", line 1013, in connect
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
File "/usr/local/lib/python3.10/site-packages/oracledb/connection.py", line 135, in __init__
impl.connect(params_impl)
File "src/oracledb/impl/thin/connection.pyx", line 318, in oracledb.thin_impl.ThinConnImpl.connect
File "src/oracledb/impl/thin/connection.pyx", line 206, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src/oracledb/impl/thin/connection.pyx", line 177, in oracledb.thin_impl.ThinConnImpl._connect_with_description
File "src/oracledb/impl/thin/connection.pyx", line 105, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "src/oracledb/impl/thin/connection.pyx", line 101, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "src/oracledb/impl/thin/protocol.pyx", line 168, in oracledb.thin_impl.Protocol._connect_phase_one
File "src/oracledb/impl/thin/protocol.pyx", line 344, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 323, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/messages.pyx", line 1676, in oracledb.thin_impl.ConnectMessage.process
File "/usr/local/lib/python3.10/site-packages/oracledb/errors.py", line 111, in _raise_err
raise exc_type(_Error(message)) from cause
oracledb.exceptions.OperationalError: DPY-6000: cannot connect to database. Listener refused connection. (Similar to ORA-12506)
这表明客户端能够连接到数据库(即没有连接/网络问题),但连接请求被服务器主动拒绝。
我在我的 Mac(英特尔)上运行相同的容器,使用相同的 dockerfile(显然是为 amd64 构建的)和相同的连接细节,没有任何问题。
in the documentation 这种行为有一个提示,但我不确定它如何/为什么适用于我的案例。具体来说,它不会在我的 Intel Mac 上运行的容器中引起问题,但它是 arm64 容器在 A1 节点上运行时的一个因素。
我是在忽略某些事情还是试图做一些规范不支持的事情?
【问题讨论】:
-
嗨,巴巴克。另一种可能产生该错误的情况是,当您的数据库上有 ACL 但您的客户端不在允许列表中时。
-
你完全正确,亚辛。为了使用瘦客户端,我在我的 ATP 实例上设置了 ACL,它被设置为我家的 IP 地址!非常感谢您的提示!
标签: python docker arm64 oracle-cloud-infrastructure oracle-autonomous-db