环境

docker 版本: 18.09.2
windows 版本:win10,用HyperV 
命令行工具:git-bash git version 2.21.0.windows.1

  

1.在当前宿主机的目录目录下创建三个文件,用来与 docker 中的 mysql 镜像进行挂载

$ mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf

 

2.初始化mysql密码并进行容器挂载,指定的容器名字若与已有的容器有冲突,可先重新命名或将有冲突的容器删除

$ docker run -p 3306:3306 --name mymysql -v "/$PWD/conf":/etc/mysql/conf.d -v "/$PWD/logs":/logs -v "/$PWD/data":/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d 

注意window10环境进行挂载,对宿主机的路径要进行转换,加上 "" 是必须的,以下一篇文章提供了不能挂载文件夹进container的解决方法,可参考

https://segmentfault.com/a/1190000017302478

参数说明:

· -p:容器的 3306 端口映射到主机的 3306 端口。

· $PWD:当前的目录路径

· -v $PWD/conf:/etc/mysql/conf.d:映射配置文件

· -v $PWD/logs:/logs: 映射日志文件

· -v $PWD/data:/var/lib/mysql:映射数据目录

· -e MYSQL_PASSWORD="123456":初始化 root 用户的密码

· -d: 后台运行容器,并返回容器ID

 

3.使用 cp 命令,将宿主机test_db目录复制到 容器 mymysql /opt 目录下,注意宿主机的目录要加双引号,不然会被认为是另一个容器

$ docker cp "C:\Users\CZY\mysql\data\test_db" mymysql:/opt

 

4.第二步执行后已后台运行容器,使用 exec 命令进入容器并开启一个shell会话(也可以使用attach),注意整个命令前面要加上 winpty(win10中才加)

$ winpty docker exec -it mymysql bash
root@398e651dd483:/#

参数说明:

· -i :以交互模式运行容器,通常与 -t 同时使用

· -t :为容器重新分配一个伪输入终端,通常与 -i 同时使用

· bash :在容器内执行打开一个shell会话,执行bash命令

 

5. cd 到含有导入文件的目录中,在进行数据导入。若不先切换补录,则 < 后边的数据要使用绝对路径表示,且test_db中的 dump 文件也要使用路径表示,不然会提示找不到文件。

另外一种方法是切换到目录后,进入mysql,然后使用 source 命令导入,但我没能操作成功,有能操作成功的请告诉我。

root@398e651dd483:/# cd /opt/test_db

root@398e651dd483:/opt/test_db# mysql -uroot -p < employees.sql

Window10环境下在Docker中导入mysql数据

 

6.在 shell 中进入 mysql 查看数据是否已正常导入,使用前面已经初始化的密码

$ winpty docker exec -it mymysql bash
root@398e651dd483:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

  Window10环境下在Docker中导入mysql数据