我试图在MySQL容器启动时创建多个数据库.

然而,我的脚本根本没有被执行.似乎docker-entrypoint.sh没有看到/docker-entrypoint-initdb.d目录中的文件.

这是我的Dockerfile:

FROM mysql
ADD script.sql /docker-entrypoint-initdb.d/script.sql
RUN chmod -R 775 /docker-entrypoint-initdb.d

ENV MYSQL_ROOT_PASSWORD mypass

这是我的script.sql:

CREATE DATABASE mydb;
CREATE DATABASE mydb2;

我构建并运行容器:

$ docker build -t mysql .
$ docker run -v data_volume:/var/lib/mysql --name somedb -d mysql

当我访问tty中的容器时,我可以看到script.sql/docker-entrypoint-initdb.d中,但没有执行.

我已经看到了docker logs -f somedb的输出,但没有错误.

我try 了.sh个文件,我也try 了Maria db,结果是一样的.

有什么问题吗?

推荐答案

You should clear 100 before run the container and the sql files will be executed.使用命令docker volume rm data_volume可以删除此卷data_volume.

你的问题的根本原因可以在docker-entrypoint.sh中找到.运行mysql容器时,它会判断mysql目录/var/lib/mysql是否存在.

    if [ ! -d "$DATADIR/mysql" ]; then
        //Some other logic here

        for f in /docker-entrypoint-initdb.d/*; do
            case "$f" in
                *.sh)     echo "$0: running $f"; . "$f" ;;
                *.sql)    echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
                *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
                *)        echo "$0: ignoring $f" ;;
            esac
            echo
        done 

详情请点击Dockerfile source

Mysql相关问答推荐

如何在使用VALUES()插入时指定jOOQ中的行别名

JPA对具有动态键和动态值的JSON列的原生查询

MySQL 搜索列字段字符串

从 NextJS/Prisma 添加用户 ID (FK) 到 MySQL 表

Mysql 查询返回未定义的 node.js

SQL查询以查找两个特定行的总和

生成直到 10 的平方数序列

将 Go var 传递给 MySQL - try 在 Go lang 程序 (MySQL db) 中执行 db.Exec 时出错

为什么这个查询需要超过 5 秒才能运行?

插入二进制数据会导致Data too long for column...

MySQL在定义表的位置后抛出错误

MySQL如何通过外键ID Select 多行?

计算每个用户在第二个表中有多少条记录

MariaDB 下的慢速更新、删除和插入查询

将 Blob 转换为字节数组的最简单方法

加快 mysql 转储和导入

为什么 MySQL 自动增量会在插入失败时增加?

如何通过一个语句描述数据库中的所有表?

MySQL合并两列并添加到一个新列中

邮箱地址可接受的字段类型和大小?