赞
踩
目录
默认情况下,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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。