20190422 之前学习 docker LNMP ,一直都是建立一个 mysql 容器 ,使用 nginx + php 容器来 link 这个 mysql 容器,再建立一个phpmyadmin 容器来管理容器中的mysql
问题:
-
实际环境中,经常是已经存在本地 mysql ,没有必要再去改动 mysql 环境,甚至转移 mysql 数据
-
有的系统安装的 mysql 缺省只有一个 locall 的root 账户,有的已经存在一个 % 的 root 账户
-
让 nginx + php 容器配置的网站,访问宿主机本地数据库的时候,身份已经不是 localhost 或 127.0.0.1 的 root了!
-
刚刚特意检查了一下 mysql 容器的mysql,已经缺省就存在 % 的 root,所以,他们只需要被 link ,就可以被 php 访问
进入 mysql 容器 [root@centos7-71 application]# docker exec -it mysql57 bash 本地mysql root@c49318865d09:/# mysql -u root -p 查询 mysql user mysql> use mysql mysql> select User,host from user; +---------------+-----------+ | User | host | +---------------+-----------+ | root | % | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 4 rows in set (0.00 sec)
-
同理,宿主机本地的 mysql 需要配置访问控制,允许非 localhost 或 127.0.0.1 的 用户(缺省为root)
2、参考
https://blog.csdn.net/weixin_36296538/article/details/84189706
3、宿主机 mysql 设置
- 修改 mysql conf
** 为了测试方便,先简单改成了 0.0.0.0 ,通过测试之后,再设置防火墙进行 ip 限制
** 也可以改成 php 容器ip (phpmyadmin容器)
cd /etc/mysql/mysql.conf.d/
vim mysql conf
# by wzh 20190422
bind-address = 0.0.0.0
# bind-address = 127.0.0.1
-
检查并增加 % 的 root 账户 (或者其他账户)
** 我这个 ubuntu 18.04 下的 mysql 中,就只有127.0.0.1 的 root 账户
** 没有按照参考中直接 update 这个 root,而是增加一条 % 的 root账户 记录
** 简单复制 127.0.0.1 的 root 记录 ,然后修改 Host = %CREATE TEMPORARY TABLE tmp SELECT * FROM user WHERE User = 'root'; UPDATE tmp SET Host='%' WHERE User = 'root'; INSERT INTO user SELECT * FROM tmp WHERE User = 'root';
确认一下:
mysql> Select User,Host from user; +------------------+-----------+ | User | Host | +------------------+-----------+ | root | % | | debian-sys-maint | localhost | | mysql.session | localhost | | mysql.sys | localhost | | phpmyadmin | localhost | | root | localhost | +------------------+-----------+ 6 rows in set (0.00 sec)
4、创建并启动 phpmyadmin 容器
-
先找个已经存在容器的宿主机,学习一下获取容器 ip 的指令
ip route show
ip route show | grep docker0
ip route show | grep docker0 | awk ‘{print $9}’ -
安装 Docker phpmyadmin 容器
docker search phpmyadmin
docker pull phpmyadmin/phpmyadmin -
启动容器,映射 宿主机 9997 端口 对应到 phpmyadmin 容器的 80 端口
docker run -d
–name myadmin
-e PMA_HOST=$(ip route show | grep docker0 | awk ‘{print $9}’)
-e PMA_PORT=3306
-p 9997:80
phpmyadmin/phpmyadmin
5、测试验证
curl 127.0.0.1:9997
浏览器测试
http://192.168.1.192:9997/index.php