从Docker文件初始化谷歌云数据

我有一个MySQL实例托pipe在Google Cloud SQL中,而且我有一个使用这个数据库的容器,我尝试使用以下命令从docker文件初始化数据库模式:

从anapsix / alpine-java

ADD ./mysql/init.sql /docker-entrypoint-initdb.d 

init.sql

 SET sql_mode = ''; CREATE DATABASE IF NOT EXISTS `locations_schema`; USE `locations_schema`; CREATE TABLE `locations` ( `id` int(11) NOT NULL, `value` varchar(255) NOT NULL, `label` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

但不幸的是,这是行不通的,有什么办法可以实现一个数据库的初始化?

我认为你正在困惑实施你的解决scheme。

如果您的容器使用了唯一的Google Cloud MySQL实例,那么为什么每次从新的自定义映像创build容器时都要尝试初始化数据库模式? 初始化它只是手动连接一次不是更好吗?

不过docker-entrypoint-initdb.d 用于初始化本地MySQL实例,而不是在另一台机器上运行的实例。 请注意,您至less需要指定实例的地址,用户和密码才能让容器连接到该实例。 为了做到这一点,有不同的方式,你可以find几个指导, 但我不认为这是你需要实现的。

但是,如果你正在尝试初始化一个在Docker容器中运行的MySQL实例,你可以在这里find一个很好的解释,但是我认为你必须改变你开始的镜像,因为我不认为它包含MySQL 。

你可以使用脚本来初始化数据库,而不需要传递root密码,只要MySQL在容器外持久化数据,并在docker run命令中指定一个卷即可。 您将需要指定特定于您的环境的环境variables。 脚本文件需要通过Dockerfile添加到容器中。 基本的MySQL命令行:

 Set -e Set -x 

然后启动MySQL守护进程

 Mysql_pid=$! 

如果需要,您可以添加一个“..”的回显,直到MySQLpipe理员启动。

 mysql -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '' WITH GRANT OPTION" 

然后closures你的MySQL守护进程

 wait $mysql_pid -- wait for it to stop 

Docker文档https://docs.docker.com/samples/library/mysql/提供了更多的数据库启动选项,包括从Docker容器中的应用程序开始。 您还可以将MySQL和docker命令组合为其他数据库function,如创build模式或创build多个数据库。