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

GitLab Runner 1.29跑Behat测试报api.local 80端口连接被拒

问题排查结论

连接80端口被拒绝的核心原因不是虚拟主机规则未识别,是Apache服务未正常启动,所有到api.local的请求根本没有被Web服务接收。

具体根因

  • 你使用的php:5.6-apache官方镜像默认通过apache2-foreground脚本以前台模式托管Apache进程,直接在CI脚本中执行apache2ctl start会出现守护进程异常:进程启动后会因为容器内无init进程托管、PID文件权限不足、环境变量未完整加载等问题立刻退出,80端口无进程监听。
  • 你的流水线脚本在执行apache2ctl start后没有做启动状态校验,虽然写了apache2ctl status但日志中无对应输出,说明启动步骤已经静默失败,后续数据库初始化、测试步骤执行时Apache早已退出。
  • 配置存在两处隐患:一是Dockerfile中APT执行顺序错误,先执行apt-get upgrade再执行apt-get update,会导致包索引过期、安装依赖失败;二是虚拟主机配置未明确开启软链访问权限,就算Apache启动成功,软链形式的项目目录也可能返回403错误。

修复方案

  1. 替换.gitlab-ci.yml中before_script段的Apache启动逻辑,增加配置校验、启动后端口检测步骤:
before_script:
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - echo "export APPLICATION_ENV='test'" >> /etc/apache2/envvars
  - export APPLICATION_ENV='test'
  - rm /var/www/globkurier.pl/globkurier.pl -Rf
  - ln -s /builds/znatury/globkurier.pl/ /var/www/globkurier.pl/globkurier.pl
  - mkdir -p /var/log/apache2/
  - chmod -R 755 /var/log/apache2/
  - echo '127.0.0.1 api.local' >> /etc/hosts
  - echo '127.0.0.1 api.mock' >> /etc/hosts
  # 先校验Apache配置合法性
  - apache2ctl configtest
  # 加载Apache环境变量,后台启动服务
  - source /etc/apache2/envvars && apache2 -DFOREGROUND &
  # 等待服务启动
  - sleep 3
  # 校验80端口监听状态
  - ss -tulpn | grep :80
  - curl -I http://127.0.0.1
  1. 调整虚拟主机配置,给软链目录开启访问权限,在api.local.conf、api.mock.conf中添加对应目录规则:
<Directory /var/www/globkurier.pl/globkurier.pl>
    Options FollowSymLinks Indexes
    AllowOverride All
    Require all granted
</Directory>
  1. 修正Dockerfile中的APT执行顺序,将apt-get update移到所有apt操作的最前面,避免包索引过期问题:
# 修正后顺序
RUN apt-get update --fix-missing
RUN apt-get upgrade -y
RUN apt-get install -y \
    # 原有依赖列表保持不变
  1. 重新构建镜像后再跑流水线,如果还是启动失败,直接查看/var/log/apache2/error.log的输出定位具体配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:09:23