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

如何让App Engine标准环境连接Compute Engine上的MySQL容器

搞定App Engine与Compute Engine上MySQL容器的通信问题

嘿,我来帮你梳理下后续的关键配置步骤——你已经设置了允许Compute服务账号的TCP 3306入站防火墙规则,接下来咱们一步步把剩下的环节补全:

1. 先捋清楚网络连通的基础配置

  • 如果你的App Engine是标准环境:默认它没法直接访问VPC内的Compute实例,得先创建一个Serverless VPC Access连接器,把App Engine接入到你的VPC网络里。要是你用的是灵活环境,直接在配置里关联VPC就行。
  • 另外,确认下你用的是Compute实例的内部IP还是外部IP:用内部IP的话必须走VPC/Serverless连接器;用外部IP的话,得确保实例有公网IP,而且防火墙规则里的目标服务账号确实绑定到了这个Compute实例上。

2. 让MySQL容器允许外部访问

MySQL容器默认只绑定127.0.0.1,只能自己玩,得改配置让它对外敞开:

  • 启动容器的时候加个参数:docker run -p 3306:3306 ... -e MYSQL_ROOT_HOST=% mysql:latest,这里%表示允许所有主机连接,嫌不安全的话可以换成App Engine的IP段或者Serverless连接器的IP范围。
  • 或者修改容器里的my.cnf文件,把bind-address改成0.0.0.0,然后重启容器。

3. 给MySQL的root用户开远程访问权限

默认root账号只能本地登录,得授权它从App Engine那边访问:

GRANT ALL PRIVILEGES ON name_of_my_database.* TO 'root'@'%' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES;

同样,为了安全,把%换成App Engine的具体IP段会更好。

4. 调整App Engine的配置

  • 标准环境的话,在app.yaml里加上VPC连接器的配置:
    vpc_access_connector:
      name: "projects/你的项目ID/locations/你的区域/connectors/连接器名称"
    
    别忘了在requirements.txt里加上MySQL驱动,比如mysqlclient>=2.2.0,不然Django连不上MySQL。
  • 灵活环境的话,直接在app.yaml里关联你的VPC:
    network:
      name: default
      subnetwork_name: default
    

5. 测试连通性排坑

  • 可以先部署个简单的测试脚本,或者用gcloud app shell进入App Engine的运行环境,执行telnet 你的Compute实例IP 3306或者nc -zv 你的Compute实例IP 3306,看看能不能连上。
  • 也可以去Compute实例上抓包,看看有没有来自App Engine的请求打到3306端口。

几个容易踩的坑

  • 防火墙规则的来源:如果用Serverless连接器,得允许连接器的IP范围;用外部IP的话,要允许App Engine的出站IP段。
  • 检查Compute实例的标签:要是防火墙规则是用标签做目标的,得确保实例已经打上了对应的标签。
  • 确认容器端口映射:用docker ps看看3306端口是不是已经绑定到主机的3306端口了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:47