Docker MySQL不会用数据来填充数据库

时间:2017-06-27 11:16:33

标签: mysql docker docker-compose mysql-workbench

我有以下docker-compose.yml

version: '2'
    services:
      storage:
        image: library/mysql:5.5
        environment:
         - MYSQL_ROOT_PASSWORD=root
         - MYSQL_DATABASE=storage
        ports:
         - 3306:3306
        volumes:
         - ./mysql-initdb:/docker-entrypoint-initdb.d
         - ./mysql-volume:/var/lib/mysql

在.sql脚本之后的docker-entrypoint-initdb.d目录中:

BEGIN;
DROP DATABASE IF EXISTS `storage`;
CREATE DATABASE `storage`;
USE `storage`;

DROP TABLE IF EXISTS SETTINGS;
CREATE TABLE SETTINGS (
  `NAME` VARCHAR(100) NOT NULL,
  `VALUE` VARCHAR(100) NOT NULL,
  PRIMARY KEY(`NAME`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

INSERT INTO
`storage`.`SETTINGS` (`NAME`, `VALUE`)
VALUES
('AAAAA','BBBBB');

COMMIT;

当我执行docker-compose up时,我得到执行.sql脚本的信息:

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/1_storage_schema.sql

当我从MySQL Workbench连接到该数据库时,我只看到没有数据的空表。看起来INSERT语句没有被执行。

我也试过了:

  1. 使用和不使用"`"命名列字符
  2. 使用而不是BEGIN / COMMIT

2 个答案:

答案 0 :(得分:1)

volumes中你错过了/,正确的语法是:

volumes:
  - ./mysql/docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d

正在发生的事情是,文件夹中的内容未被复制,而是在docker-entrypoint-initdb.d内创建了一个文件夹。要确保它位于正确的位置,请使用docker exec

查看容器内部

答案 1 :(得分:0)

我遇到了同样的问题。 MySQL没有填充表。 Mysql被定义为Docker卷,并且导入sql被绑定安装。这些定义很好。我多挖了一点,发现我的环境中设置了MYSQL_USER和MYSQL_PASSWORD。我还试图在/docker-entrypoint-initdb.d目录中名为0users.sql的文件中运行一些sql。该文件正在尝试恢复在MYSQL_USER环境变量中定义的用户。我删除了2个环境变量。然后,我删除了Docker容器和mysql卷。然后,再次尝试。工作。

我的假设是,如果容器遇到任何类型的SQL错误,则整个导入似乎都将停止。由于我的文件位于字母顺序的首位,因此导入在创建用户时终止,并且没有导入任何表。