Navicat 连接远程服务器里 docker 中的 mysql(已解决)

本文详细介绍了如何在Docker中管理端口映射,包括初始设置和后续增加映射,以及如何修改MySQL的root用户访问权限和配置文件。此外,还指导了在Navicat中通过SSH连接到Docker容器中的MySQL数据库的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 开启端口映射

docker中,我们需要将允许外界访问的端口通过配置文件映射出来,本文不需要将3306端口映射,但是该部分还是有实际用途的,因此在此记录。着急可以跳过第一部分。
在创建并运行镜像的时候,我们会初始化参数,例如:

docker run -p 20000:22 -p 3000:3000 --name my_docker_sercer -itd docker_image:1.0 # 创建并运行docker_image:1.0镜像

但是,我们有时候会在创建后增加映射端口,此时,我们可以通过修改配置文件的方式处理。

  • 在容器外,使用root用户登录
docker ps -a # 查看所有容器信息
docker inspect xxx |grep Id # 查看需要添加端口映射的容器的id(xxx是需要添加端口映射的容器的名称)

image.png

  • 进入目录/var/lib/docker/containers

如果容器还在运行,需要先停止docker服务:systemctl stop docker
image.png
查看该目录下的所有容器,进入需要增加端口号的容器。
image.png
编辑hostconfig.json添加端口映射(参考其他端口格式):
image.png
编辑config.v2.json公开添加的端口(参考其他端口格式):
image.png

  • 重启容器:
systemctl start docker # 启动docker服务
docker start kob_server # 后面为自己的容器名称
# 启动容器后记得重启自己的服务(mysql, java, nginx等)
  • 到服务器中添加安全组(ip可以根据实际需求只放行本地ip):

image.png

2. 修改mysql配置

正文开始。

  • 修改mysql中的root用户访问权限

将mysql中的user表的root用户的host字段修改为%

show databases;
use mysql;
SELECT user, host FROM user;
UPDATE user SET host = '%' WHERE user = 'root';
# 最后记得刷新一下
FLUSH PRIVILEGES;

image.png

  • 修改配置文件

其实如果我们后面使用ssh连接容器,这一步修改没有必要,因为我们连接容器后就能够通过127.0.0.1访问数据库,但是可能有的同学想通过其他当时连接,这里将方法说明。着急的直接进入下一节。

这里有个坑,很多教程修改的是my.conf文件,但是mysql8以后就不在该文件中了,而是在mysqld.cnf中。

cd /etc/mysql/mysql.conf.d/
sudo vim mysqld.cnf

image.png
进入文件之后查找到bind-address,将这一行注释掉(需要一点点vim知识)
image.png

  • 最后重启mysql服务
service mysql restart

3. 在navicat中连接mysql

  • 在navicat中连接mysql数据库,选择ssh

需要注意的是,端口应选择容器的运行端口,密码是用户登录密码,不是mysql的密码。
image.png

  • 然后选择常规:

注意这里的主机是服务器容器中的本地ip,因为我们是通过ssh连接到容器了。
image.png

  • 最后点击测试连接并确定

image.png
才疏学浅,有问题请指正。

### Navicat 连接 DockerMySQL解决方案 当遇到 Navicat 无法连接到运行在 Docker 容器中的 MySQL 数据库时,通常会涉及以下几个方面的原因分析和解决方法: #### 1. **确认 MySQL 容器已正常启动** 确保 Docker 容器内的 MySQL 服务正在运行。可以通过 `docker ps` 命令查看当前活动的容器列表。如果目标容器未显示,则说明其可能未正确启动[^1]。 此外,可以进一步验证 MySQL 是否在容器内部正常工作: ```bash docker exec -it <container_id_or_name> bash mysql -u root -p ``` 上述命令用于进入容器并测试是否能够通过本地客户端访问 MySQL。如果能成功登录,则可排除 MySQL 自身的服务异常问题。 --- #### 2. **检查端口映射配置** Navicat 默认需要通过主机上的指定端口来访问容器中的 MySQL 实例。因此,在创建或运行 Docker 容器时需设置正确的端口映射参数 `-p` 或 `--publish`。例如: ```bash docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:tag ``` 此操作将把宿主机的 3306 端口绑定至容器内的默认 MySQL 端口 (同样为 3306)[^1]。如果没有执行此类映射或者端口号不匹配,可能导致连接失败。 另外还可以利用以下指令检验实际开放情况: ```bash netstat -an | grep LISTEN ``` 寻找是否有监听于所设定外部接口地址与对应端数之上之记录存在。 --- #### 3. **处理权限不足引发的问题** 即使网络可达性和端口转发均无误,仍可能存在因用户授权范围受限而导致拒绝访问的情况。此时应赋予特定账户允许来自任意 IP 地址(`%`)的数据请求权利: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` 注意替换 `'root'`, `%`, 和密码字段为你实际情况下的值。完成更改之后记得重启数据库服务使新规则生效。 --- #### 4. **防火墙及其他安全机制干扰排查** 有时即便完成了以上步骤依旧遭遇阻碍可能是由于操作系统层面的安全防护措施所致比如 Windows Defender Firewall/Linux iptables etc.. 。故而建议临时关闭这些组件做一次全面检测以便定位真正原因所在: 对于 Linux 用户而言, ```bash sudo ufw disable # or iptables -F ``` 而对于 windows 则可通过图形界面管理工具实现快速开关功能。 最终一旦确定是由这类因素引起的话则应当调整相应策略而非彻底禁用它们从而保障整体安全性不受影响。 --- ### 总结代码片段展示如何构建带适当选项启动含暴露必要端口给外界使用的Mysql实例样例程序如下所示: ```bash docker run --name=mysql-server \ -e MYSQL_ROOT_PASSWORD=examplepassword \ -d \ -p 3306:3306 \ mysql:latest ``` 随后按照前述指导逐一核验直至找到确切症结为止。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值