我刚刚学习了docker的基础知识,但是从本地系统导入SQl文件时却停滞不前。我在Windows 10上,并允许我的docker容器访问我的共享驱动器。我有一个位于D上的SQL文件我想导入到我从docker hub获得的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
方法2
docker exec -i my-new-database mysql -uroot -pnew-db-password --force < d:/sql_dump_file.sql
2016年5月12日更新
所以在一个令人失望的周末玩游戏之后。我目前将驱动器更改为C:驱动器,因为似乎有一些未知的问题我无法通过让D:驱动器工作来调试。
然后我找到了inspect命令来查看装入容器的卷。我有以下,但我不能导入到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"
}
]
答案 0 :(得分:3)
我建议如下:
创建容器时,将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>
答案 1 :(得分:3)
经过一些调整和更好的理解后,我在测试后得出结论,即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