【发布时间】:2019-03-11 14:04:09
【问题描述】:
我正在尝试从 App Engine 中的自定义运行时环境连接到 google sql 云实例。
当我按照doc 使用 unix 域套接字进行连接时,它可以工作。问题是当我尝试使用 TCP 连接进行连接时。它显示:
Warning: mysqli_connect(): (HY000/2002): Connection refused in
/var/www/html/index.php on line 3
Connect error: Connection refused
这是我的 app.yaml 文件:
runtime: custom
env: flex
beta_settings:
cloud_sql_instances: testing-mvalcam:europe-west1:testdb=tcp:3306
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
Dockerfile:
FROM php:7.0-apache
ENV PORT 8080
CMD sed -i "s/80/$PORT/g" /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf && docker-php-entrypoint apache2-foreground
RUN docker-php-ext-install mysqli
RUN a2enmod rewrite
COPY ./src /var/www/html
EXPOSE $PORT
还有index.php:
<?php
$link = mysqli_connect('127.0.0.1', 'root', 'root', 'test');
if (!$link){
die('Connect error: '. mysqli_connect_error());
}
echo 'successfully connected';
mysqli_close($link);
?>
我做错了什么?
【问题讨论】:
-
您能解释一下您从哪里得到该错误消息,即通过 ssh 连接到运行 docker 进程的计算引擎,然后使用本地 IP 地址和您公开的端口发出 HTTP GET 请求?另外,您是否为您的项目启用了“Cloud SQL Admin API”(您可以通过console.cloud.google.com/apis/api/sqladmin.googleapis.com/… 进行检查)?
-
当我访问项目 url 时,我确实直接得到了错误。 Index.php 加载,但与云 sql 的连接被拒绝。是的,我启用了 Cloud SQL Admin API。奇怪的是,当我使用 unix 套接字类型连接(到 /cloudsql/
)时,它可以工作。只有当我尝试使用 TCP 连接时才会收到此错误。 -
好的,如果您可以通过 ssh 连接到与 App Engine 应用程序关联的 Compute Engine vm 实例之一(您可以在 Google Cloud Console 的 App Engine 菜单的实例部分中看到它们),并且运行命令“netstat -tln”。在输出中检查“local_ip_address:8080”并在 index.php 中插入“local_ip_address”作为 mysqli_connect 调用的第一个参数,而不是“127.0.01”。
-
没错!!,这就是问题所在。当我 ssh 到实例并运行“netstat -tln”时,我得到了暴露的 ip,例如:172.17.0.1:3306 和 172.17.0.1:8080。我不明白。为什么会这样?。无论如何,官方文档是不正确的。其中,清楚地表明您必须指向 localhost 才能连接到云 sql 实例。如果你愿意,写一个答案,以便能够给你打分并标记为有效答案。谢谢!。
标签: google-app-engine google-cloud-platform google-cloud-sql