docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql
目录
1.网络超时
方式1. 网络连接问题
方式2. Docker镜像源问题
方式3.使用国内镜像源
2.启动mysql镜像失败
1.网络超时
安装MySQL时出现超时问题,可能由多种原因导致:
方式1. 网络连接问题
-
原因:网络不稳定或速度慢,导致下载MySQL镜像或软件包时超时。
-
解决方法:
-
检查网络连接,确保网络稳定。
-
切换到国内镜像源,如使用阿里云的Docker镜像加速器,以提高下载速度。
-
方式2. Docker镜像源问题
-
原因:使用国外的Docker镜像源时,访问速度很慢,可能会因为网络问题导致下载超时。
-
解决方法:
配置国内的Docker镜像加速器,如阿里云镜像加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://<your-mirror-address>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
方式3.使用国内镜像源
如果没有阿里云的镜像加速器,就使用国内的docker镜像源来拉取
国内常用的Docker镜像加速器地址(无需注册,直接配置):
镜像源 | 加速器地址 |
---|---|
网易 | https://hub-mirror.c.163.com |
腾讯云 | https://mirror.ccs.tencentyun.com |
中科大 | https://docker.mirrors.ustc.edu.cn |
Docker官方中国源 | https://registry.docker-cn.com |
百度云 | https://mirror.baidubce.com |
通过编辑 /etc/docker/daemon.json
文件(若文件不存在则创建)来配置镜像源(可配置多个),示例如下:
{"registry-mirrors": ["https://阿里云专属加速器地址.mirror.aliyuncs.com", // 替换为你的阿里云地址"https://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com"]
}
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
2.启动mysql镜像失败
sudo docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-d mysql:5.7 \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql
查看容器启动失败(exited),使用 docker logs mysql查看错误信息
从新的日志信息可知,MySQL 容器启动失败是因为 mysqld
无法读取 /etc/mysql/conf.d/
目录,错误码显示该目录不存在。我们的命令指定的配置文件路径是/etc/mysql/,而容器读取的配置文件路径是/etc/mysql/conf.d/。
在这一行-v /mydata/mysql/conf:/etc/mysql,我们将主机路径/mydata/mysql/conf挂载到容器路径/etc/mysql下,但实际上容器配置在/etc/mysql/conf.d/目录下。
修改启动的配置文件
docker run -d \--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
mysql:5.7
启动成功
3.navicat无法远程连接mysql
这个错误表明,你的客户端尝试通过 IP 地址连接到 MySQL 服务器,但服务器拒绝了这个请求。这是因为在 MySQL 中,用户权限是与客户端的 IP 地址绑定的。如果用户 root
没有被授权从 这个 IP 地址进行连接,就会出现这个错误。
docker start mysql
docker exec -it mysql bash
mysql -uroot -p123456
grant all privileges on *.* to root@'%' identified by '123456' with grant option;
flush privileges;