我有一个在Google Cloud SQL中托管的MySQL实例,并且我有一个使用此数据库的容器,我尝试使用以下命令从Docker文件中初始化数据库架构:p>来自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;
但不幸的是,这是不起作用的,有什么办法可以实现DB的初始化?
我认为您在实施解决方案时感到困惑。
如果您有一个唯一的Google Cloud MySQL实例,您的容器使用了为什么每次从新的自定义映像创建容器时尝试初始化数据库架构?只要手动连接到它就可以初始化它?
但是,docker-entrypoint-initdb.d
用于初始化本地MySQL实例,而不是在其他计算机中运行的实例。请注意,您至少需要指定实例,用户和密码的地址,以使容器连接到它。为此,有不同的方式,您可以找到多个指南,,但我认为这是您需要实现的。
但是,如果您试图在此处的Docker容器中启动MySQL实例,您可以找到一个很棒的解释方法,但是我认为您必须更改您要开始的图像,因为我不认为这是它包含mysql。
您可以使用脚本进行初始化DB,而无需传递root密码,前提是MySQL在容器之外持续存在数据,并且您可以在Docker Run命令上指定卷。您将需要指定针对环境特定的环境变量。需要通过Dockerfile将脚本文件添加到容器中。基本mySQL命令行:
Set -e
Set -x
然后启动MySQL守护程序
Mysql_pid=$!
您可以为" .."添加一个回声,直到MySQL管理员启动,如果需要。
mysql -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '' WITH GRANT OPTION"
然后关闭您的mysql守护程序
wait $mysql_pid -- wait for it to stop
Docker文档,https://docs.docker.com/samples/library/mysql/提供更多的DB启动选项,包括从Docker容器中的应用程序开始。您还可以将MySQL和Docker命令组合为其他数据库函数,例如创建架构,或创建多个数据库。