Docker Compose Mysql 初始化文件错误(Windows,Dockertoolbox)

10 浏览
0 Comments

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。

有人可以帮帮我吗?

0
0 Comments

问题的出现原因是在使用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

0