从 Docker 文件初始化 google 云 sql

initialize google cloud sql from Docker file

我在 Google 云 SQL 中托管了一个 MySQL 实例,并且我有一个使用该数据库的容器,我尝试从 [=26] 初始化数据库模式=] 文件使用以下命令:

从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;

但不幸的是这不起作用,有什么方法可以实现数据库的初始化?

我认为您在实施解决方案时感到困惑。

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

但是 docker-entrypoint-initdb.dused to initialize 本地 MySQL 实例,而不是另一台机器中的实例 运行。请注意,您至少需要指定实例的地址、用户和密码才能让容器连接到它。为此,有不同的方法,您可以找到几个指南,但我认为这不是您需要实施的方法。

但是,如果您尝试在 Docker 容器 中初始化一个 MySQL 实例 运行,您可以找到一个很棒的解释如何做到这一点,但我认为您必须更改您开始使用的图像,因为我认为它不包含 MySQL.

您可以使用脚本来初始化数据库而无需传递 root 密码,前提是 MySQL 将数据持久保存在容器外部并且您在 docker 运行命令。您将需要指定特定于您的环境的环境变量。脚本文件需要通过 Docker 文件添加到容器中。基本 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/ offers more DB start options, including starting from an application in a docker container. You can also combine MySQL and docker commands 其他数据库功能,如创建模式或创建多个数据库。