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 mysqlADD 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