使用 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_file.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
我只是在学习 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_file.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