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

Circle CI:无法通过Docker实例连接MySQL的问题求助

无法连接CircleCI中MySQL容器的问题排查与解决

问题描述

我尝试在CircleCI中部署MySQL Docker镜像、创建数据库并测试运行迁移(migrations)和种子文件(seeders),但系统提示无法访问运行在127.0.0.1:3306的MySQL服务器,是否有遗漏的配置?

报错信息

#!/bin/bash -eo pipefail
mysql -h 127.0.0.1 -u root -psecret dbname < output/migrate.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (111)

Exited with code exit status 1
CircleCI received exit code 1

我的CircleCI配置

version: 2.1

jobs:
  migrate-seed:
    docker:
      - image: cimg/base:2022.10
      - image: cimg/mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: secret
          MYSQL_DATABASE: dbname
    steps:
      - checkout
      - run: sudo chmod +x scripts/dump-all
      - run: mkdir output
      - run: scripts/dump-all
      - run: sudo apt-get update
      - run: sudo apt-get install -y mysql-client
      - run:
          name: Run Migrations
          command: mysql -h 127.0.0.1 -u root -psecret dbname < output/migrate.sql
      - run:
          name: Run Seeders
          command: mysql -h 127.0.0.1 -u root -psecret dbname < output/seed.sql
workflows:
  database:
    jobs:
      - migrate-seed

解决方案

1. 修正容器间的连接地址

CircleCI中,同job下的多个Docker容器是通过容器别名进行网络通信的,而非127.0.0.1(127.0.0.1指向的是执行命令的base容器自身)。

将连接命令中的-h 127.0.0.1替换为-h mysql(第二个容器的默认别名是镜像名称mysql,也可以在配置中给MySQL容器指定name字段自定义别名)。

2. 添加MySQL启动等待逻辑

MySQL容器启动需要一定时间初始化,直接运行迁移会因服务未就绪导致连接失败。需要在安装mysql-client后,添加等待脚本确保MySQL服务可用:

until mysql -h mysql -u root -psecret -e "SELECT 1"; do
  echo "等待MySQL启动..."
  sleep 2
done

3. 调整后的完整CircleCI配置

version: 2.1

jobs:
  migrate-seed:
    docker:
      - image: cimg/base:2022.10
      - image: cimg/mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: secret
          MYSQL_DATABASE: dbname
    steps:
      - checkout
      - run: sudo chmod +x scripts/dump-all
      - run: mkdir output
      - run: scripts/dump-all
      - run: sudo apt-get update
      - run: sudo apt-get install -y mysql-client
      - run:
          name: 等待MySQL服务启动
          command: |
            until mysql -h mysql -u root -psecret -e "SELECT 1"; do
              echo "等待MySQL启动..."
              sleep 2
            done
      - run:
          name: Run Migrations
          command: mysql -h mysql -u root -psecret dbname < output/migrate.sql
      - run:
          name: Run Seeders
          command: mysql -h mysql -u root -psecret dbname < output/seed.sql
workflows:
  database:
    jobs:
      - migrate-seed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:20:31