如何连接到App Engine定制运行时Dockerfile中的SQL实例?

有很多的文件,但没有具体的Dockerfiles(或我错过了)。

我的app.yaml文件:

runtime: custom env: flex env_variables: MYSQL_DSN: mysql:unix_socket=/cloudsql/project-name:europe-west1:test001;dbname=db001 MYSQL_USER: root MYSQL_PASSWORD: 'qwerty' 

我的Dockerfile:

 FROM ubuntu:16.04 ARG dbuser ENV dbuser ${MYSQL_USER} ARG dbpass ENV dbpass ${MYSQL_PASSWORD} ARG dbhost ENV dbhost ${MYSQL_DSN} RUN apt-get update RUN apt-get install mysql-client RUN mysql -h ${dbhost} -u ${dbuser} -p${dbpass} -e "CREATE DATABASE 'test';" 

文档如下:

  • https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml#Node.js_app_yaml_Defining_environment_variables
  • https://cloud.google.com/appengine/docs/php/cloud-sql/

mysql命令行不理解您传递的DSN语法。 套接字和数据库必须分别传入。

此外,Dockerfile中的“RUN”条目在构build泊坞窗图像之前运行,然后才会在您的应用程序中运行。 因此它没有可用的环境。 此外,您可能不希望在构build映像时configuration或访问远程数据库。

这是一个替代scheme:

的app.yaml

 runtime: custom env: flex env_variables: MYSQL_SOCK: /cloudsql/project-name:europe-west1:test001 MYSQL_DB: db001 MYSQL_USER: root MYSQL_PASSWORD: 'qwerty' 

your_program.sh

 #!/bin/sh mysql -S $MYSQL_SOCK -u $MYSQL_DB -p$MYSQL_PASSWORD $MYSQL_DB -e "CREATE DATABASE 'test';" 

Dockerfile

 FROM ubuntu:16.04 RUN apt-get update RUN apt-get install mysql-client CMD ["your_program.sh"]