草庐IT

在docker容器里连接上本地mysql8.0.30数据库的方法

ylnzzl 2024-07-10 原文

目录

概述

具体步骤


概述

默认情况下,Docker会创建一个名为docker0的网桥。 Docker主机和Docker容器在该网桥上都有一个IP地址。在这个模式下,docker容器与主机的网络是不互通的,docker 及docker下的容器之间有个地址相同 (同ip段),外网访问只能通过端口映射。如果docker容器里的nginx需要连本机mysql , 那么可以将mysql的3306端口打开,通过外网去连接。

具体步骤

(1). 切换到root账号,否则保存文件时会提示文件处于只读状态。

在主机命令行里运行命令:

su root


(2). 修改mysql配置文件,修改配置为允许远程连接,并开放3306端口。

在主机命令行里运行命令:

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


然后用字符#注释掉如下两行代码:

bind-address        = 127.0.0.1
mysqlx-bind-address    = 127.0.0.1


(3). 重启mysql服务。

在主机命令行里运行命令:

service mysql stop
service mysql start


(4). 检查3306端口是否开启成功。
在主机命令行里运行命令:

netstat -an|grep 3306


如果出现:::3306,而不是127.0.0.1:::3306,那么就表示3306端口已开启成功。

运行结果示例图:

 
(5). 查看docker容器连接主机的ip地址。
在主机命令行里运行命令:

ifconfig

在结果列表中找到docker0这一项对应的inet值。

运行结果示例图:

也可以在主机命令行里运行命令:

ip addr show docker0

来找到对应的inet值。

运行结果示例图:

 
(6). 修改对应程序.env文件里的mysql配置项,其中hostname这一项填写前面步骤里找到的docker0网桥的inet值【例如172.17.0.1】,并对应着修改mysql配置项里的数据库名称、用户名、密码为自己本地mysql软件里对应数据库的名称、用户名、密码。


(7). 重启容器并检查容器状态是否为正在运行中(running)。

在项目容器目录下运行命令:
 

# 重启容器
docker-compose restart

# 查看容器列表
docker-compose ps 

容器列表中status这一列的值为running就表示容器状态为正在运行中,即刚才重启容器的操作已成功执行完毕。

(8). 运行项目程序并访问项目地址,检查项目程序是否可以正常运行、使用的数据来源是否是本地mysql数据库里的数据等。

(9). 运行完前面的(8)步骤后,如果运行程序报如下的错误:
[PDOException]                             
  SQLSTATE[HY000] [2002] Connection refused

那么很可能是因为账号权限方面的问题。一种可以尝试的解决办法如下:

运行mysql -u root -p后输入密码,进入mysql控制台,完成如下I、II、III、IV步骤。
I.创建账户。
  

create user '用户名A'@'docker0网桥的inet值【例如172.17.0.1】' identified by '用户名A对应的密码';

II.赋予权限。
    

grant all privileges on *.* ro '用户名A'@'docker0网桥的inet值【例如172.17.0.1】';

        如果是修改权限,那么还需要在上面这条命令末尾分号前加上with grant option。
III.刷新权限。
    

flush privileges;

IV. 重启mysql服务。
  

service mysql stop
service mysql start

有关在docker容器里连接上本地mysql8.0.30数据库的方法的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  6. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  7. ruby - Rails -- :id attribute? 所需的数据库索引 - 2

    因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration

  8. ruby-on-rails - 如何让 datamapper 与 postgresql 数据库一起工作? - 2

    我已经找到了几个使用datamapper的示例,并且能够让它们正常工作。不过,所有这些示例都是针对sqlite数据库的。我正在尝试将数据映射器与postgresql一起使用。我将datamapper中的调用从sqlite3更改为postgres,并且我已经安装了dm-postgres-adapter。但它仍然不起作用。我还需要做什么? 最佳答案 与SQLite不同,PostgreSQL不将数据库存储在单个文件中。在你拥有createdyourdatabase之后,尝试这样的事情:DataMapper.setup:default,{:

  9. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  10. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

随机推荐