• docker for windows的windows container下部署mysql


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

    部署步骤如下:

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

    2、启动命令

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

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

    3、mysql容器启动成功后,可以docker ps看到容器状态
    在这里插入图片描述
    接下来要进入容器

    docker exec -it mysqlContainer cmd
    
    • 1

    重置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可以在控制台查看运行结果
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

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

    因为映射端口设置的是3307:80,看起来应该是容器ip:3307这样来连接数据库的,但是连接3307端口连不上,这就奇了怪了,这设置的映射端口没什么卵用。
    在这里插入图片描述
    使用下面的命令,可以查看mysql容器的状态

    docker inspect mysqlContainer
    
    • 1

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

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

    docker exec -it mysqlContainer cmd
    
    • 1

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

    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';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    第一句是以权限用户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
    
    • 1
  • 相关阅读:
    图解KMP字符串匹配算法+代码实现
    请帮我看下下面的题我写的代码为什么没有输出,哪里写错了
    ORA-00904: “EQUIPMENTS0_“.“CREATETIME“: 标识符无效
    逻辑数据平台的 NoETL 之道(内含Q&A)
    日本大阪大学万伟伟研究员介绍基于WRS系统机器人的快速集成方法和应用
    Linux学习笔记——修改文件的所有者和所有组
    Managing Supply and Demand Balance Through Machine Learning-笔记
    Java类和对象(一)
    【多媒体技术与实践】音频信息获取和处理——编程题汇总
    CSS 实现卡片边框渐变动画
  • 原文地址:https://blog.csdn.net/m0_67402588/article/details/126327134