在GitLab CI中如何访问待测试的docker化应用?
GitLab CI环境下docker-compose服务访问地址说明
分两种常见场景对应不同的访问地址:
场景1:测试代码直接运行在CI Job容器中(最常用场景)
根据你使用的GitLab Runner类型不同,地址分为两类:
- 如果你用的是宿主机直接安装Docker的Shell Runner:Docker daemon直接运行在Runner所在宿主机上,端口映射直接绑定宿主机端口,你可以和本地运行一致,使用
http://localhost:8080访问前端,http://localhost:8082访问后端API。 - 如果你用的是Docker-in-Docker(dind)模式的Runner(GitLab CI运行Docker相关任务的主流配置):你的docker-compose命令实际连接的是独立的dind服务容器的Docker daemon,端口映射绑定的是dind容器的网卡,此时不能用localhost访问,需要用dind服务的默认主机名
docker作为地址,对应前端地址为http://docker:8080,后端API地址为http://docker:8082。
场景2:测试代码也作为docker-compose的服务运行
如果你的TestNG测试代码也打包成镜像,加入到同一个docker-compose.yml的服务列表中运行,那么所有服务都处于同一个Docker自定义网络内,你可以直接用docker-compose的服务名作为主机名访问,不需要走端口映射:
- 测试代码访问前端:
http://frontendapp:80 - 测试代码访问后端API:
http://demoapi:80
该方式不需要适配不同的Runner环境,稳定性更高,更推荐使用。
额外优化建议
- 你可以在CI脚本中docker-compose启动完成后,执行
docker-compose port <服务名> <容器内端口>命令动态获取对应服务的可访问地址,避免硬编码地址出错,比如获取前端地址执行docker-compose port frontendapp 80即可。 - 当前的
depends_on配置只会等待容器启动,不会等待容器内的应用进程就绪,建议给每个服务增加healthcheck配置,避免测试启动时服务还未初始化完成导致用例失败。
内容的提问来源于stack exchange,提问作者gandra404
相关产品推荐
相关产品推荐

