docker-entrypoint-initdb中的MySQL脚本未执行

我正在尝试在MySQL容器启动时创建多个数据库。根据https://github.com/docker-

library/mysql/pull/18,我可以/docker-entrypoint-

initdb.d在映像的中装载或复制脚本,它们将在启动时自动执行。

但是我的脚本根本没有执行。好像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输出,但是没有错误。

我尝试使用.sh文件,也尝试使用Maria-db,结果是相同的。

可能是什么问题呢?

回答:

在运行容器之前,请先将data_volume设置为空。并且您的sql文件将肯定被执行。

这里的问题:

在docker-entrypoint.sh中,使用/ var / lib / mysql中存在的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源上获得更多详细信息

以上是 docker-entrypoint-initdb中的MySQL脚本未执行 的全部内容, 来源链接: utcz.com/qa/435616.html

回到顶部