如何连接到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"]