当前位置:   article > 正文

Docker下部署Mysql映射端口并挂载数据卷_mysql创建容器,设置端口映射、目录映射

mysql创建容器,设置端口映射、目录映射

1、搜索mysql镜像文件版本

docker search mysql
  • 1

在这里插入图片描述

2、下载最新版本mysql 或者 下载指定版本mysql

2.1 下载最新版【一般项目不直接使用最新版】

docker pull mysql
  • 1

在这里插入图片描述

2.2 下载指定版本

docker pull mysql:版本号
  • 1

在这里插入图片描述

3、查询是否下载完成mysql

docker images
  • 1

注意mysql:lastest 表示为最新版本。【注意,如果安装较低或较高版本mysql,可能会出现中文存储乱码问题
在这里插入图片描述

4、指定端口映射,启动mysql

4.1 创建目录挂载mysql数据

cd /data
mkdir mysql
  • 1
  • 2

在这里插入图片描述

4.2 创建对应文件挂载目录

mkdir conf 
mkdir logs
mkdir data
  • 1
  • 2
  • 3

在这里插入图片描述

4.3 创建容器,设置端口映射,目录映射

  • pwd目录可以查看当前目录位置
  • 先开放你需要对应的端口号,比如我服务器原先的3306已经再使用中,因此选择使用3307端口映射docker当前mysql容器的3306端口。
  • 使用防火墙命令查看开放的端口号,需要确保防火墙开启
    • systemctl status firewalld.service
  • 如果没有开启,使用下面命令开启防火墙
    • systemctl start firewalld.service
  • 查看已经开放的端口号
 firewall-cmd --list-all
  • 1
  • 开放新的端口号
firewall-cmd --add-port=3307/tco --permanent
  • 1
  • 刷新端口信息
firewall-cmd --reload
  • 1

4.4 通过命令启动容器

  • $PWD:当前目录
  • MYSQL_ROOT_PASSWORD=123456 :指定MYSQL登录密码
docker run -id -p 3307:3306 --name=mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
  • 1

在这里插入图片描述

4.5 如果报错

类似以下内容

docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql8.0 (40258727d69ad134fd5ab114ced064d470a34164a5fa6133cb75d8d43e96d6b8):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 
--dport 3307 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

  • 1
  • 2
  • 3
  • 4

经过查阅资料得知是docker0网桥的原因,解决上面报错问题需要进行一下步骤
具体文章可以看这位大佬的,我也是参考后解决:https://blog.csdn.net/weixin_30919235/article/details/101665464

注意:解决上面这个问题后,先删除刚才创建的msyql容器,再重新运行启动容器命令。
删除容器指令

docker ps -a // 参考启动的docker容器
docker rm b7735650df8e // 指定ID删除
  • 1
  • 2

再启动

docker run -id -p 3307:3306 --name=mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
  • 1

5、Navicat连接mysql,报错原因

  • 如果报错10060或者10061错误。
  • 有一下几个原因
    • 1、端口没有开放,开放端口往前看下,有教程。
    • 2、服务器防火墙没有关闭,systemctl stop firewalld
    • 3、端口号没有填写正确,不一定是3306,是看你映射的哪个端口,这里我是3307
    • 4、当前账号root只能本地登录,需要进去mysql容器中授权不限制IP登录。
docker exec -it mysql bash//进入容器的命令
mysql -u root -p //登录MySQL
//登录以后进行授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION; //任何远程主机都可以访问数据库
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/478367
推荐阅读
相关标签
  

闽ICP备14008679号