我正在尝试在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 db容器在创建时自动用数据集填充数据库。根据mariadb留档,卷中有一个文件夹可用于此目的。 我设置了我的文件来镜像我在StackOverflow上找到的示例,但是仍然无法执行我的SQL脚本。以下是我的文件的相关部分: 在文件,我有一个文件: 在每次测试迭代之前,我会清理所有旧的/缓存的Docker内容: 我发现这实际上并没有删除数据库卷。运行仍会显示过去存在的卷 Do
按照在CMD之前执行脚本的建议(我需要在容器重新启动之前清除一个临时dir,以修复一个bug),我将docker文件从使用CMD修改为entrypoint,如下所示: 并且在入口点文件中,在rm-rf命令之后结束: 但是docker无法启动容器,它退出,容器日志显示:
我发现了docker入口点initdb。请参阅MySQL文档“如何使用此映像”中的“初始化新实例”部分。但当我在包含docker compose的目录中运行docker compose up时。下面的yml文件,我的数据库未初始化。 我确认了目录包含一个名为的文件。我确认清空目录并运行后,创建了数据库。但是数据库没有填充,除非我在Adminer中手动执行脚本。(我单击“导入”,然后选择文件并按执行
为什么clonenode脚本不在firefox中执行。它在铬合金中工作良好? <代码> 我通过将替换为 原因又能是什么呢?
问题内容: 我正在尝试设置一个mysql docker容器并执行init sql脚本。不幸的是SQL脚本没有执行。我究竟做错了什么? 我执行文件 问题答案: 许多容器化的应用程序,尤其是有状态的应用程序,都有一种运行脚本的方式(例如此处的sql脚本), 并且 它们只能运行 一次 。 并且由于它们是有状态的,因此对于容器是否在容器重新启动时运行脚本而言,卷是事实的来源。 与您的情况类似,删除用于绑定
如何让bash脚本查看设置在.env和/或docker-compose-yaml中的env变量? . env docker-compose.yml entrypoint.sh