Docker Compose Mysql 初始化文件错误(Windows,Dockertoolbox)
Docker Compose Mysql 初始化文件错误(Windows,Dockertoolbox)
我正在尝试使用docker-compose设置两个docker容器,使用以下yml文件:
version: '3.5'
services:
db:
image: mysql:5.7
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: abc
MYSQL_DATABASE: shopsystem
MYSQL_USER: shoppingsystem
MYSQL_PASSWORD: abc
volumes:
- ./test.sql:/docker-entrypoint-initdb.d/test.sql
- db_data:/var/lib/mysql
backend:
build:
context: ./nodeserver
dockerfile: Dockerfile
image: node-test
container_name: servernode-1
ports:
- 8084:8082
volumes:
db_data: {}
test.sql与docker-compose.yml文件位于根目录上。
当我启动docker-compose时,
docker-compose up
我遇到了以下错误:
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/test.sql ERROR: Can't initialize batch_readline - may be the input source is a directory or a block device.
我已经阅读了一些关于这个问题的帖子,但是我无法解决它。
我使用以下命令清除了卷:
docker-compose down -v
我使用的是Windows和dockertoolbox来运行docker-compose。
有人可以帮帮我吗?
问题的出现原因是在使用Docker Compose时,配置的MySQL初始化文件(test.sql)无法正确加载,导致出现错误信息"ERROR: Can't initialize batch_readline - may be the input source is a directory or a block device."。
解决方法有两种:
1. 将需要初始化的SQL文件放在一个目录中,然后将该目录与Docker容器中的特定目录进行映射。具体操作如下:
volumes:
- myvolumes:/docker-entrypoint-initdb.d
- db_data:/var/lib/mysql
其中,myvolumes为需要映射的目录,可以根据实际情况进行修改。
2. 如果只需要映射单个文件,则可以使用以下方法:
version: "3.2"
services:
app:
image: app:latest
volumes:
- type: bind
source: ./test.sql
target: /location/test.sql
其中,source为需要映射的文件路径,可以根据实际情况进行修改。
以上方法参考了以下文档:
- 官方文档:https://docs.docker.com/storage/bind-mounts/
- Stack Overflow上的相关问题:Mount single file from volume using docker-compose