我在使用docker-compose导入.sql转储文件时遇到问题。我遵循了文档,它显然将从docker-入口点-initdb.d加载.sql文件。但是,当我运行docker-compose up
时,SQL文件不会复制到容器中。
我尝试使用-vf
标志停止容器,但也不起作用。我是不是在.yml脚本中做错了什么?
我在我的合成文件所在的根目录下的数据库/db-ump/目录中有dup.sql。
frontend:
image: myimage
ports:
- "80:80"
links:
- mysql
mysql:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_USER: dbuser
MYSQL_PASSWORD: userpass
MYSQL_DATABASE: myimage_db
volumes:
- ./database/db-dump:/docker-entrypoint-initdb.d
7条答案
按热度按时间z31licg01#
这对我很管用,
MySQL-DUMP必须是一个目录。目录中的所有.sql都将被导入。
rm5edbpk2#
在多次尝试音量设置后,我找到了一种解决方法
我创建了另一个基于MySQL的映像,在Dockerfile中包含以下内容
然后从Compose中删除卷并运行新映像
这样,转储文件始终被复制并在启动时运行
ac1kyiln3#
这将出现在Docker MySQL图像:https://hub.docker.com/_/mysql/的文档页面上
初始化新示例
容器第一次启动时,会创建一个指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它还将执行扩展名为
.sh
、.sql
和.sql.gz
的文件,这些文件位于/docker-entrypoint-initdb.d中。文件将按字母顺序执行。通过将SQL转储挂载到该目录并为custom images提供贡献的数据,您可以轻松地填充MySQL服务。默认情况下,SQL文件将导入到由MYSQL_DATABASE
变量指定的数据库。ckx4rj1h4#
MySQL数据库转储schema.sql驻留在**/mysql-ump/schema.sql**目录中,它在初始化过程中创建表。
Docker-compose.yml:
hs1rzwqc5#
我在使用MySQL时遇到了类似的问题,我将通过docker-compose将一个本地目录挂载到/configs/mysql/data,其中包含一个mydatabase asedump.sql文件到docker-entry-initdb.d卷,该文件将加载到容器上,但不会在容器初始化时执行或填充数据库。我最初的docker-compose.yml如下所示:
我为这个问题找到了两个可行的解决方案:
第一次是在我登录正在运行的容器并确认mydatabase asedump.sq文件存在并且在容器的docker-entry-initdb.d目录中可执行之后;我创建了一个bash脚本,并将其添加到我的本地/configs/mysql/data目录中,该目录在容器初始化后执行,名为ump.sh。它包含一个MySQL命令,该命令将my_database_ump.sql复制到my_app_database。Bash脚本如下所示
我通过入口点指令中的Dockerfile执行此脚本,如下所示:
在意识到最初的问题是由于在构建容器之后装入卷,因此在引导时没有使用转储文件的数据库(或执行该目录中的任何脚本)之后,第二个解决方案简单地将我的组成文件中的VOLUES指令移到了BUILD指令之上。这起作用了,并允许我删除Dockerfile中的dup.sh脚本和DOCKERENTRY指令。修改后的docker-compose.yml如下所示
rsaldnfx6#
我也有这个问题。我通过docker-compose将包含init.sql文件的本地目录挂载到./mysql上,将该文件加载到容器上,但不会在容器初始化时执行或填充数据库。我最初的docker-compose.yml如下所示:
但这对我不起作用。对于这个问题,我找到了另一个可行的解决方案:将
--init-file /data/application/init.sql
添加到MySQL命令中。希望能对你有所帮助
zmeyuzjn7#
我想保留容器的原始设置,所以我尝试在已经运行的容器上进行恢复。这似乎奏效了:
但它非常慢,冗长的输出似乎得到了缓冲,所以我尝试了:
这至少提供了更快的反馈。
可能对某些人有用?看起来很慢,因为我在转储上使用了
--skip-extended-insert
,在没有扩展插入的情况下,它运行得更快🙂