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

Jenkins任务中Oracle 19c容器间歇性报DBT-06103端口占用如何解决?

解决Jenkins中Oracle 19c容器间歇性端口占用(DBT-06103)问题

问题现象

[FATAL] [DBT-06103] The port (5,500) is already in use.
ACTION: Specify a free port.

以下是针对容器动态主机名环境的解决方案:

  • 容器启动时使用随机端口映射
    启动Oracle容器时,不固定绑定宿主机的5500端口,让Docker自动分配空闲端口,从根源避免固定端口冲突。示例命令:

    docker run -d -p 1521 -p 5500 --name oracle-19c oracle/database:19c
    

    启动后可通过docker inspect oracle-19c | grep -A 2 "5500"查看实际映射的宿主机端口。

  • Jenkins任务中动态获取映射端口
    在Jenkins流水线脚本里,添加步骤动态提取容器的端口映射信息,传入测试用例配置:

    def oraclePort = sh(script: 'docker inspect -f "{{(index (index .NetworkSettings.Ports \"5500/tcp\") 0).HostPort}}" oracle-19c', returnStdout: true).trim()
    

    后续测试用例直接使用oraclePort变量作为数据库连接端口即可。

  • 端口预检查后选择启动方式
    若需要兼容固定端口场景,可在容器启动前检查宿主机5500端口状态,被占用则用随机端口:

    if lsof -Pi :5500 -sTCP:LISTEN -t >/dev/null ; then
        docker run -d -p 1521 -p 5500 --name oracle-19c oracle/database:19c
    else
        docker run -d -p 1521:1521 -p 5500:5500 --name oracle-19c oracle/database:19c
    fi
    
  • 用Docker Compose管理动态端口
    编写Compose配置文件,不指定宿主机端口,让Compose自动分配:

    version: '3'
    services:
      oracle-db:
        image: oracle/database:19c
        ports:
          - "1521"
          - "5500"
    

    在Jenkins中启动容器后,通过docker compose port oracle-db 5500获取实际端口,再同步到测试配置。

内容的提问来源于stack exchange,提问作者Vishwanath Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:07:39