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

GitLab CI中如何设置容器主机名与域名,适配MySQL用户授权?

解决方案

要让GitLab CI中执行script的容器使用指定主机名/域名,从而匹配MySQL的权限规则,你可以通过以下两步配置实现:

1. 为Job容器指定主机名

在你的Product-API Job配置中添加hostname字段,直接设置需要的主机名:

Product-API:
  image: serversideup/php:8.2-fpm-nginx
  # 指定容器主机名
  hostname: hostname.domain.com
  
  services:
    - name: mysql:8.0.33-debian
      alias: mysql
      entrypoint: ['/bin/sh', '-c', 'sed -i -e "/^skip-name-resolve/d" /etc/mysql/conf.d/docker.cnf && /usr/local/bin/docker-entrypoint.sh mysqld']
  
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
    GIT_SUBMODULE_FORCE_HTTPS: "true"
    # 启用构建专属网络,确保容器间能解析主机名
    FF_NETWORK_PER_BUILD: 1

    #mysql variables
    MYSQL_DATABASE: product_db
    MYSQL_ROOT_PASSWORD: [nice password]
    MYSQL_USER: jdoe
    MYSQL_PASSWORD: [nice password]
    
   ... micro services variables

  before_script:
    ...download, unpack and load the product database
    ...install micro service
    
  script:
    # 移除修改用户权限的命令
    - mysql -ujdoe -p[nice password] --host=mysql product_db -e 'select 1;'

2. 启用构建专属网络

取消注释FF_NETWORK_PER_BUILD: 1变量,这个特性会为每个Job创建独立的Docker网络,让Job容器和服务容器(比如MySQL)在同一个网络内,互相可以通过主机名解析对方的IP。

原理说明

  • 设置hostname后,执行script的容器会以hostname.domain.com作为自身主机名运行
  • 启用专属网络后,MySQL容器能直接解析到Job容器的主机名,当Job容器连接MySQL时,MySQL会通过反向DNS解析获取到hostname.domain.com,正好匹配你预先在user表中配置的权限规则,无需修改用户的授权范围。

额外注意事项

  • 确保你的GitLab Runner使用的是docker或docker+machine执行器(这是默认的云/自建Runner配置),hostname配置仅对这类执行器生效
  • 你已经在MySQL服务的entrypoint中移除了skip-name-resolve,这是必须的——如果开启这个配置,MySQL会跳过反向DNS解析,直接用IP验证权限,会导致匹配失败

内容的提问来源于stack exchange,提问作者St. Jan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:41