有很多文档,但没有具体的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';"
随后的文件:
答案 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"]