本次是在win10环境下的windows container模式中部署mysql镜像

部署步骤如下:

1、在dockerhub上拉取winamd64版本的mysql镜像。

2、启动命令

docker run -p 3307:80 -it --name mysqlContainer -d nanoserver/mysql:latest

注意这里,我的启动命令是把映射端口设置为外部3307,容器内部80,请继续向下看。

3、mysql容器启动成功后,可以docker ps看到容器状态

docker for windows的windows container下部署mysql_mysql


接下来要进入容器

docker exec -it mysqlContainer cmd

重置mysql的root用户密码

1、停止MySQL服务 cmd命令:net stop mysql
2、创建一个 mysql_init.txt 文件
加入一句话:ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
echo ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';>mysql_init.txt
引号里面的的信息为账号和密码
3、进入MySQL安装的bin目录 打开cmd控制台
执行:mysqld --init-file=C:/mysql_init.txt --console
console可以在控制台查看运行结果

4、因为我们这是mysql容器,外部要访问我们的mysql数据库,要知道容器ip

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" mysqlContainer

5、有了容器ip,就可以使用数据库连接工具进行连接了

因为映射端口设置的是3307:80,看起来应该是容器ip:3307这样来连接数据库的,但是连接3307端口连不上,这就奇了怪了,这设置的映射端口没什么卵用。

docker for windows的windows container下部署mysql_docker_02


使用下面的命令,可以查看mysql容器的状态

docker inspect mysqlContainer

有下面的片段

docker for windows的windows container下部署mysql_MySQL_03


这个主机端口是3307,但是就是3307连不上,倒是3306可以连接,但是显示的是1130不能远程连接的错误,因为在启动命令的时候,并没有添加其他的附加命令。

6、解决数据库连接1130远程不能连接
进入容器命令

docker exec -it mysqlContainer cmd

然后在容器中,输入下面的指令:

mysql -u root -p
密码:root
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host' from user where user='root';

第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
记得Mysql服务需要重新启动(确保修改有效),否则可能修改的结果无法体现。

7、然后就可以正常使用数据库连接工具了,连接成功会有mysql版本的提示,我的mysql容器的版本是5.7.22的,宿主机是8.0.18的,注意连接ip不要写错

可以在mysql容器中,创建个数据库,测试是否可以正常使用。

8、现在数据库已经可以正常使用了,但是有点疑惑的是,为啥我设置了映射端口没什么卵用?
9、如果我在mysql容器的启动命令里加上如下

挂载数据卷和更改root用户密码,就启动报错了,必须得最简单启动后,在容器内部进行密码重置,但是现在数据卷的持久化还没有解决。

docker run -p 80:80 -v C:/Users/cq/Desktop/mysql:C:/mysql --name mysqlContainer -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=root -e MYSQL_PASSWORD=root -d nanoserver/mysql:latest