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
相关产品推荐
相关产品推荐

