真正解决Docker运行MySQL后,本地无法访问的问题

适用系MySQL8.0.x/5.6.x

一、跟着教程安装

1.1 拉取 MySQL 镜像

docker pull mysql:latest

1.2 查看本地镜像

使用以下命令来查看是否已安装了 mysql:

docker images

1.3 运行容器

安装完成后,我们可以使用以下命令来运行 mysql 容器:

docker run -itd --name mysql8 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

参数说明:

-p 3308:3306 :映射容器服务的 3306 端口到宿主机的 3308 端口,外部主机可以直接通过 宿主机ip:3308 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

1.4 安装成功

通过 docker ps 命令查看是否安装成功:
在这里插入图片描述

1.5 附加设置

#进入容器
docker exec -it [CONTAINER ID] bash

#登录mysql
mysql -u root -p

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';

#添加远程登录用户
CREATE USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%';

二、报错

2.1 尝试在宿主机本地连接Docker的MySQL

mysql -h localhost -u root -P 3308 -p

#报错
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
mysql -h 127.0.0.1 -u root -P 3308 -p

#报错
error: 2013, Lost connection to MySQL server at 'reading initial communication packet', system error: 0

要解决上面两个报错,必须要明白docker与宿主通讯的方式。

解决方法:

本地pc->linux->docker,它们的访问路径大概是这样。
首先要获得linux的ip,并确认本地pc能ping通linux机器。如果无法ping通,则无法访问。
我的linux是用vmware虚拟出来的ubuntu,原来虚拟机的上网方式是nat,这时虚拟机能ping通pc的ip,但pc无法ping通虚拟机。暂时找不到解决方法。
将虚拟机的上网方式改为桥接,ip自动获取,一连接就成功。

希望能帮到大家,如果有其他方法也请在留言区留言,大家一起探讨。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
为了让 Docker 容器中的服务能够访问本地 MySQL,你需要进行以下几个步骤: 1. 确认本地 MySQL 的 IP 地址 在本地命令行中输入以下命令: ``` ipconfig ``` 在输出中找到你的本地 IP 地址。通常情况下,你可以找到类似于 `192.168.x.x` 或者 `172.x.x.x` 的 IP 地址。 2. 创建 Docker 网络 在 Docker 中,可以使用自定义网络来让容器之间进行通信。你可以使用以下命令来创建一个自定义网络: ``` docker network create my-network ``` 其中,`my-network` 是你要创建的网络名称。 3. 启动 Docker 容器并连接到自定义网络 在启动 Docker 容器时,你需要将容器连接到自定义网络,并指定本地 MySQL 的 IP 地址。你可以使用以下命令来启动容器并连接到自定义网络: ``` docker run --name my-container --network my-network -e DB_HOST=192.168.x.x -d my-image ``` 其中,`my-container` 是你要启动的容器名称,`my-network` 是你要连接的自定义网络名称,`DB_HOST` 是你要指定的本地 MySQL 的 IP 地址,`my-image` 是你要使用的 Docker 镜像。 在容器中,你可以使用 `$DB_HOST` 环境变量来访问本地 MySQL。例如,如果你要使用 Node.js 连接本地 MySQL,可以使用以下代码: ```javascript var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.DB_HOST, user : 'root', password : 'password', database : 'my-db' }); ``` 需要注意的是,为了让容器能够访问本地 MySQL,你需要在本地防火墙中开放 MySQL 的端口(默认是 3306 端口)。 以上就是让 Docker 容器访问本地 MySQL 的方法。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值