You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中使用gvenzl/oracle-free镜像遇多类问题求助

解决GitHub Actions中gvenzl/oracle-free容器的初始化与连接问题

一、Error 45初始化SQL*Plus错误处理

  • 修正脚本挂载路径:GitHub Actions的service容器无法直接识别相对路径,需使用工作区绝对路径挂载初始化脚本,修改volumes配置:
    volumes:
      - ${{ github.workspace }}/my-init.sql:/container-entrypoint-initdb.d/my-init.sql:ro
    
  • 强化健康检查配置:Oracle容器启动耗时较长,将--health-retries调整为20,确保容器完全就绪后再执行初始化:
    options: >-
      --health-cmd healthcheck.sh
      --health-interval 10s
      --health-timeout 5s
      --health-retries 20
    
  • 验证脚本语法:确保my-init.sql末尾语句加分号,切换容器的命令alter session set container=freepdb1;符合23c Free默认PDB配置。

二、sqlplus路径不存在错误处理

  • 使用PATH中的命令:镜像已将sqlplus加入系统PATH,无需硬编码绝对路径,修改create_tables.sh中的命令:
    sqlplus sys/${ORACLE_PASSWORD}@//oracle:1521/FREEPDB1 as sysdba @create_tables.sql
    
  • 确认镜像路径(可选):若必须用绝对路径,可本地运行docker exec <容器ID> which sqlplus获取正确路径,替换脚本中的硬编码路径。

三、gvenzl/setup-oracle-free@v1容器状态错误处理

  • 添加启动等待步骤:在动作执行前增加等待逻辑,确保容器进入运行状态:
    - name: Wait for Oracle container
      run: |
        until docker exec oracle healthcheck.sh; do
          echo "Waiting for Oracle container..."
          sleep 10
        done
    
  • 切换回原生service配置:若动作稳定性不足,建议使用最初的service容器配置,可控性更强。

四、JDBC连接被拒错误处理

  • 使用正确的连接字符串:连接PDB需用服务名而非SID,且GitHub Actions中需通过服务名oracle访问容器,JDBC字符串示例:
    jdbc:oracle:thin:@//oracle:1521/FREEPDB1
    
  • 确认用户创建上下文:确保用户在目标PDB中创建,你的my-init.sql已切换到freepdb1,可额外添加解锁语句保障可用性:
    alter session set container=freepdb1;
    CREATE USER TEST IDENTIFIED BY test QUOTA UNLIMITED ON USERS;
    ALTER USER TEST ACCOUNT UNLOCK;
    GRANT CONNECT, RESOURCE TO TEST;
    
  • 验证环境变量传递:确保ORACLE_PASSWORD等变量正确传递到执行JDBC连接的步骤中,避免密码或用户名错误。

内容的提问来源于stack exchange,提问作者Bea Pérez Valle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:46:20