mariadb 在Docker容器中运行SQL脚本

xjreopfe  于 2022-11-08  发布在  Docker
关注(0)|答案(1)|浏览(300)

当我用docker创建MariaDB数据库时,我想运行一个带有ddl和dml的sql文件。我已经在我的docker-compose文件的根目录中指定了这个文件,如下所示。

volumes:                                                   
  - "./scripts/init.sql:/docker-entrypoint-initdb.d/1.sql"

然而,当我运行docker-composite up命令时,它只创建了没有表和数据的数据库,我到底应该如何填充数据库。

  • Edit* 我用一个小的sql文件尝试了它,只包含这个ddl,仍然没有创建任何东西。
CREATE TABLE `ALARM_A` (
                                  `id` bigint(20) NOT NULL AUTO_INCREMENT,
                                  `version` bigint(20) NOT NULL,
                                  `creation_date` datetime NOT NULL,
                                  `is_new` bit(1) NOT NULL,
                                  `order_id` bigint(20) NOT NULL,
                                  PRIMARY KEY (`id`)
)
  • 第二次编辑 * 我对我的docker-compose做了一点修改,现在它创建了表,但是,它只完成了一部分,而不是59个表,我得到了3个。我尝试删除容器并再次创建,以及再次构建,但我得到了相同的结果,这是我的docker-compose文件。
version: "3.8"
services:
  phedon-service:
    build: .
    restart: always
    ports:
      - "8080:8080"
    networks:
      - phedon
    depends_on:
      - mysql
    env_file:
      - .env
  mysql:
      image: mariadb:10.6
      container_name: mariadb
      volumes:
        - container-volume:/var/lib/mysql
        - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: name_db
      ports:
        - "3307:3307"
networks:
   phedon:
volumes:
  container-volume:
  • 更新 *

我在db服务部分添加了这个

volumes:
      - container-volume:/var/lib/mysql
      - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql

在我的创作文件的底部

volumes:
  container-volume:

确保在运行docker build命令之前删除卷,之后您可以完美地合成。

6ljaweal

6ljaweal1#

如果我在scripts/init.sql中有您的示例SQL脚本,并且我使用以下docker-compose.yaml

version: "3"

services:
  mariadb:
    image: mariadb:10
    volumes:
      - "./scripts/init.sql:/docker-entrypoint-initdb.d/1.sql"
    environment:
      MARIADB_ROOT_PASSWORD: secret
      MARIADB_DATABASE: example

然后在I docker-compose up之后,等待初始化完成,我看到:

$ docker-compose exec mariadb mysql -psecret example -e "show tables"
+-------------------+
| Tables_in_example |
+-------------------+
| ALARM_A           |
+-------------------+

相关问题