Docker环境下Oracle Autonomous DB无钱包TLS连接失败问题咨询
排查解决步骤
- 检查容器内Oracle Instant Client的默认配置
进入运行中的容器,查看/usr/lib/oracle/21/client64/lib/network/admin/路径下的sqlnet.ora文件,确认是否还残留WALLET_LOCATION配置项,同时确认SSL_CLIENT_AUTHENTICATION参数已设置为FALSE。本地环境运行正常大概率是因为你已经修改了本地的sqlnet.ora配置,但容器内的Instant Client自带的配置没有同步更新,依然会尝试读取钱包文件导致报错。 - 核对连接串参数一致性
确认容器内代码读取到的DSN连接串和本地使用的完全一致,检查是否有环境变量、配置文件覆盖了连接串,导致连接串中还携带了wallet_location相关的参数,只要连接参数中存在钱包路径配置,客户端就会尝试读取对应文件。 - 修复目录权限配置
你的Dockerfile中只给/app目录加了appuser的访问权限,但复制钱包的路径/home/appuser/wallets/没有显式设置权限,哪怕你现在已经不用钱包,只要任意配置还在尝试访问该路径,appuser没有读取权限就会抛出文件打开失败的错误。可以修改Dockerfile中用户创建的相关逻辑:RUN useradd appuser && mkdir -p /home/appuser/wallets && chown -R appuser:appuser /app /home/appuser/wallets - 显式指定oracledb驱动模式
如果你使用的是python-oracledb驱动,可以在代码初始化连接时显式指定禁用钱包配置,或者切换为thin模式运行,thin模式不需要依赖本地Instant Client的配置,能避免本地和容器的环境差异问题。
内容的提问来源于stack exchange,提问作者jasper
相关产品推荐
相关产品推荐

