使用 mariaDB 将 sql 转储文件安装到 docker 容器

Install an sql dump file to a docker container with mariaDB

我只是在学习 docker 的基础知识,但在从本地系统导入 SQl 文件时遇到了困难。我在 windows 10 并允许我的 docker 容器访问我的共享驱动器。我在 D 上有一个 SQL 文件,我想导入到从 docker 集线器获得的 Maria DB 的基本图像。

我找到了一个命令,可以在我的图像上安装 sql 文件,并尝试直接从容器中导入图像 sql 命令提示符,但出现无法打开文件的错误。

以下是我尝试过的两种方法,但是我应该在哪里存储我的 sql 转储以及如何导入它?

方法 1 通过 mysql 命令行尝试

winpty docker run -it --link *some-mariadb*:mysql --rm mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

然后

use *database-created* // previously created 

然后

source d:/sql_dump_file.sql

方法二

docker exec -i my-new-database mysql -uroot -pnew-db-password --force < d:/sql_dump_file.sql

2016 年 5 月 12 日更新

所以在玩了一个令人失望的周末之后。我目前将驱动器更改为 C: 驱动器,因为似乎存在一些未知问题,我无法通过让 D: 驱动器工作来进行调试。

然后我找到了检查命令来查看容器中安装了哪些卷。我有以下内容,但我无法导入到 SQL,因为它说文件不存在,但它在 docker 中清楚地表明它在那里并已安装,SQL 文件是在 map_me 文件夹中。我在 C:

的主目录中创建了一个名为 map_me 的文件夹
docker inspect dbcontainer

       "Mounts": 
           [
            {
                "Source": "/map_me",
                "Destination": "/docker-entrypoint-initdb.d/sl_dump_fil‌​e.sql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
           ]

我推荐以下内容:

创建容器时将 sql_dump_file.sql 挂载到 /docker-entrypoint-initdb.d/。官方 MariaDB 镜像会在启动时恢复它。

docker run -d --name <containername> -v d:/sql_dump_file.sql:/docker-entrypoint-initdb.d/sl_dump_file.sql <environment_variables> <imagename> <startup commands>

所以经过一些调整和更好的理解,我在测试后得出结论,docker-compose 是要走的路。因此,第一个文件夹包含一个执行配置的 my.cnf 文件,然后 @Farhad 识别的另一个文件夹用于初始化 .sql 文件。

version: "2"

services:

    mariadb_a:
        image: mariadb:latest
        ports: 
         - "3306:3306"
        environment:
         - MYSQL_ROOT_PASSWORD=111111
        volumes:
         - c:/some_folder:/etc/mysql/conf.d
         - c:/some_other_folder:/docker-entrypoint-initdb.d