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

时间:2017-01-23 19:56:13

标签: google-app-engine docker dockerfile

有很多文档,但没有具体的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';"

随后的文件:

1 个答案:

答案 0 :(得分:2)

mysql命令行无法理解您传递的DSN语法。套接字和数据库必须单独传递。

另外" RUN" Dockerfile中的条目在构建docker镜像时运行,然后才能在App中实际运行。因此,它没有可用的环境。此外,您可能不希望在构建映像时配置或访问远程数据库。

这是另一种选择:

的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"]