我正在尝试使用docker创建一组容器(wordpress和mysql),这将有助于我使用wordpress进行本地开发。当我们运行一个实时数据库时,我想将dump.sql文件装载到docker mysql容器中。下面是我的.yml文件。
version: '2'
services:
db:
image: mysql:latest
volumes:
- ./data:/docker-entrypoint-initdb.d #./data holders my dump.sql file
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
- ./wp-content/themes/portalV3:/var/www/html/wp-content/themes/portalV3
- ./wp-content/plugins:/var/www/html/wp-content/plugins
- ./wp-content/uploads:/var/www/html/wp-content/uploads
一切正常,但10秒后,mysql的docker容器崩溃了。通过查看日志,我发现以下错误:
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/dump.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR: Can't initialize batch_readline - may be the input source is a directory or a block device.
仔细检查(附加到重新启动的mysql容器)我发现dump.sql文件确实没有传输到容器中,但是在/docker entrypoint initdb.d中创建了一个同名的文件夹。
有人能帮我理解docker compose是如何复制dump.sql文件并导入数据库的吗?
干杯,
彼得
2条答案
按热度按时间kadbb4591#
docker entrypoint initdb.d的问题是,因为源“data”是目录而不是文件,所以目标文件(docker entrypoint initdb.d)也必须是目录。反之亦然。
你也可以
或
x8goxv8g2#
是的,那就是你应该如何登上
.sql
或者.sh
文件,即通过Mapsql或.sh
文件到docker容器的docker-entrypoint-initdb.d
文件夹。但是,由于一些奇怪的原因,它引发了一个错误,可能是因为mysql docker版本太旧了。你可以通过创建一个自定义图像来解决这个问题,
dockerfile文件
它创建一个映像,并在启动容器时帮助运行init脚本。
要在编写文件中使用此功能,请将sql文件和dockerfile放在一个文件夹中。
docker-compose.yml公司
这样,您就可以轻松地配置环境变量。