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

使用ACT的GitHub Actions:Docker容器内访问MySQL服务

GitHub Actions中容器化步骤访问Services服务(MySQL示例)

当你给GitHub Actions的Job配置了container字段后,所有步骤都会在这个容器内运行,而services中定义的MySQL服务是一个独立容器,两者默认处于GitHub Actions自动创建的专属网络中,但不能通过127.0.0.1访问——因为本地回环地址只指向当前步骤所在的容器。

解决方案:使用服务名称作为主机地址

GitHub Actions会自动为每个services条目创建DNS解析,直接用服务的名称(这里是mysql)作为主机名就能访问对应的服务,不需要把端口映射到主机。

1. 修改MySQL连接命令

把原来的mysql -h127.0.0.1改成:

mysql -hmysql -uroot -psecret

2. 优化Services配置(可选)

既然容器间网络不需要端口暴露到主机,可以移除services里的ports字段,减少不必要的配置:

services:
  mysql:
    image: mysql:5.7
    env:
      MYSQL_ROOT_PASSWORD: secret
    options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

修改后的完整Workflow示例

name: Docker

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  namea:
    name: Docker Test
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_ROOT_PASSWORD: secret
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
    container:
      image: public-docker-image
      options: --user root
      ports:
        - 80:80
    steps:
      - uses: actions/checkout@v3
      - name: Setup
        run: |
          # 可选:先验证DNS解析和连通性
          ping -c 3 mysql
          # 连接MySQL并执行测试命令
          mysql -hmysql -uroot -psecret -e "SELECT VERSION();"

原理说明

GitHub Actions会为每个Job创建一个专属的Docker网络,Job的主容器(即container字段定义的容器)和所有services容器都会自动加入这个网络。在这个网络内,容器之间可以通过服务名称直接访问对方的默认端口(MySQL默认是3306),无需额外端口映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:22:51