Mysql Docker编写初始化数据库

Mysql Docker编写初始化数据库,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我有一个docker文件 version: '3.7' services: db: image: mysql:latest container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: 12345 volumes: - ./docker/db:/docker-entrypoint-initdb.d

我有一个docker文件

version: '3.7'

services:        
  db:
      image: mysql:latest
      container_name: mysql
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: 12345
      volumes:
        - ./docker/db:/docker-entrypoint-initdb.d
      ports:
        - "3306:3306"
和一个MySQL脚本来初始化数据库

CREATE DATABASE `aaa`;
USE `aaa`;


CREATE TABLE `building` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `start_date` date DEFAULT NULL,
  `end_date` date DEFAULT NULL,
  `open` tinyint(4) DEFAULT NULL,
  `address_type` varchar(30) DEFAULT NULL,
  `address_name` varchar(45) DEFAULT NULL,
  `address_number` varchar(45) DEFAULT NULL,
  `cap` char(5) DEFAULT NULL,
  `city` varchar(45) DEFAULT NULL,
  `province` varchar(45) DEFAULT NULL,
  `state` varchar(45) DEFAULT NULL,
  `req_amount` float DEFAULT NULL,
  PRIMARY KEY (`id`)
);
实际上Docker忽略文件INIT_DB.SQL,如下所述:

mysql | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/DB_INIT.SQL
我想用这个文件初始化数据库。我也试过:

哪里出错了?

这对我来说很有用:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"

    environment:
      TZ: "America/Halifax"
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: formulary

    volumes:
    - ./mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
    - ./mysql.cnf:/etc/mysql/conf.d/mysql.cnf

您放置的内容和我放置的内容之间的唯一区别是,我放置了源文件/目标文件(而不仅仅是目录)。另外,您确定。/docker/db包含您的文件吗?

在第一个答案下方的注释中出现了相同的错误(…是一个目录)。实际上对我有用的东西

postgres:
  volumes:
    - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d/

docker entrypoint.sh
*.sh
*.sql
*.sql.gz
文件识别为初始文件<代码>*。SQL不在其中(Linux区分大小写),因此它被忽略。好的,这很有意义。我重命名了它,但它仍然会出现相同的错误:(您需要删除容器和图像并重新创建它们。我这样做了,我使用了
docker compose rm-vf
my./docker/db/INIT_db.sql存在,添加INIT_db.sql的完整路径,它说:
mysql |/usr/local/bin/docker-entrypoint.sh:running/docker-entrypoint-initdb.d/INIT_db.sql mysql |错误:无法初始化批处理读取线-可能是输入源是目录或块设备。
初始化容器会导致错误:无法初始化批处理\u readline-可能是输入源是目录或块设备。当由于docker为任何丢失的装入文件创建空目录的行为而导致主机丢失装入的文件时。->听起来像是您的文件名有输入错误,或者不可读。或者您在sql文件存在之前运行此docker compose文件并创建了该名称的空目录。