【问题标题】:Install an sql dump file to a docker container with mariaDB使用 mariaDB 将 sql 转储文件安装到 docker 容器
【发布时间】:2017-04-16 23:41:40
【问题描述】:

我只是在学习 docker 的基础知识,但一直坚持从本地系统导入 SQl 文件。我在 Windows 10 上,并允许我的 docker 容器访问我的共享驱动器。我有一个位于 D 上的 SQL 文件,我想导入从 docker hub 获得的 Maria DB 的基本映像。

我找到了一个在我的镜像上安装该 sql 文件的命令,并尝试从容器 sql 命令提示符内直接导入镜像,但得到一个无法打开文件的错误。

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

方法一尝试通过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"
            }
           ]

【问题讨论】:

    标签: mysql docker mariadb


    【解决方案1】:

    我推荐以下:

    在创建容器时将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>
    

    【讨论】:

    • 它创建了图像文件,但是当我进入 sql 时,它只有默认的 mysql 表。
    • 试试这个:docker run -d --name &lt;containername&gt; -v d:\sql_dump_file.sql:/docker-entrypoint-initdb.d/sl_dump_file.sql &lt;environment_variables&gt; &lt;imagename&gt; &lt;startup commands&gt;
    • 同样的事情,使用标准 MySQL 配置创建数据库,但我的 SQL 转储不存在。
    • 有更简单的方法或其他方法吗?
    • 基本都是正确的,剩下的就是windows问题,路径。尝试启用文件和打印机共享。
    【解决方案2】:

    所以经过一些调整和更好的理解,我在测试后得出结论,docker-compose 是要走的路。所以第一个文件夹包含一个执行配置的 my.cnf 文件,然后@Farhad 标识的另一个文件夹用于 intilize .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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2023-04-05
      • 2017-01-22
      • 2023-03-30
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多