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

本地正常但GitLab CI中无法连接Docker部署的MySQL容器

解决GitLab CI中MySQL导入报错ERROR 2002的问题

核心原因

本地执行正常但CI中报错,主要是两个问题:

  • MySQL容器尚未完全启动就绪,脚本就提前执行了导入命令
  • docker-compose中healthcheck的参数格式错误,导致健康检查未生效,无法正确判断容器状态

具体修复步骤

1. 修正docker-compose.yml中的healthcheck配置

原healthcheck的mysqladmin ping参数顺序和格式错误,导致健康检查失效。修改为正确的参数格式(注意-p和密码之间无空格):

healthcheck:
  test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "symfony", "-psymfony"]
  timeout: 20s
  retries: 10

2. 在CI脚本中等待MySQL容器就绪

在docker-compose up -d之后,添加等待逻辑,确保MySQL完全启动后再执行导入:

# 等待MySQL容器健康检查通过(兼容新版docker-compose)
docker-compose wait database

# 或者用循环检测(兼容旧版docker-compose)
until docker-compose exec -T database mysqladmin ping -h localhost -u symfony -psymfony --silent; do
  echo "等待MySQL启动..."
  sleep 2
done

3. 备选:强制使用TCP连接(绕过socket问题)

如果上述步骤仍有问题,可以修改导入命令,指定-h 127.0.0.1强制使用TCP连接,避免socket路径相关问题:

docker-compose exec -T database mysql -usymfony -psymfony -h 127.0.0.1 symfony < ci/db_dump.sql

完整CI脚本调整示例

修改后的CI脚本关键部分:

- docker-compose up -d
- docker-compose logs
# 等待MySQL就绪
- docker-compose wait database
# 执行导入
- docker-compose exec -T database mysql -usymfony -psymfony symfony < ci/db_dump.sql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:45:32