我有以下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语句没有被执行。
我也试过了:
答案 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错误,则整个导入似乎都将停止。由于我的文件位于字母顺序的首位,因此导入在创建用户时终止,并且没有导入任何表。