docker 连接宿主机的 MySQL
docker 连接宿主机的 MySQL
本文地址:https://blog.lucien.ink/archives/505
在实际生产过程中,docker 内的服务有时需要连接宿主机的 MySQL,在这里记录一下踩过的坑。
0. 本文环境
Name | Version |
---|---|
Docker |
19.03.4, build 9013bf583a
|
OS |
Debian GNU/Linux 9
|
1. 宿主机的 IP
在容器内执行 ip route
命令,default via
后面跟着的 IP 就是宿主机的 IP。
root@debian: docker run --rm busybox ip route
default via 172.18.0.1 dev eth0
172.18.0.0/16 dev eth0 scope link src 172.18.0.2
可以看到,此容器的本机 IP 为 172.18.0.2
,宿主机的 IP 是 172.18.0.1
。
1.1 docker network 对 IP 的影响
在宿主机中运行 docker run --rm busybox ip route
获得的宿主机 IP 为 172.18.0.1
,在指定了 network
的容器内 ping
不通。后来发现在不同的 network
下,容器的 IP 段是不一样的,在这里复现一下。
root@debian: docker network create test # 创建新的 network
d5c1f383ee4c397112660b18087c42fe8f3e000ced2949778b4adb4925e6882d
root@debian: docker run --rm --network test busybox ip route
default via 192.168.192.1 dev eth0
192.168.192.0/20 dev eth0 scope link src 192.168.192.2
可以看到,在指定了 network
后,IP 段就从 172.18.0.0/16
变成了 192.168.192.0/20
。
1.2 查看 network 的信息
可以通过 docker network inspect <network name>
的命令来查看 network 的信息。
其中 Gateway 字段代表宿主机的地址。
root@debian: docker network inspect test
[{"Name": "test","Id": "d5c1f383ee4c397112660b18087c42fe8f3e000ced2949778b4adb4925e6882d","Created": "2020-08-25T23:44:15.827765119+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.192.0/20","Gateway": "192.168.192.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
2. 宿主机的防火墙
在能 ping
通宿主机的前提下,尝试通过 mysql -h 192.168.192.1 -u root -p
命令登录宿主机的 MySQL,结果 Timeout 了。
但是在容器内执行 curl 192.168.192.1
是有 response
的,证明是宿主机的 3306
端口没有放开,放开 3306
端口即可。
一般云服务器厂商自身还有一个防火墙,只要云服务器控制面板里的防火墙不放开
3306
端口的话,外界依然访问不了服务器的3306
端口,所以可以大胆在服务器内放开3306
端口,不必担心安全问题。
3. MySQL 的白名单
解决了防火墙的问题之后,在容器内再次尝试通过 mysql -h 192.168.192.1 -u root -p
连接宿主机的 MySQL,收到了来自 MySQL 的报错 Host '192.168.192.2' is not allowed to connect to this MySQL server
,直接在 MySQL 中将 192.168.192.2
加入白名单即可。
如果是多个容器都需要连接宿主机的 MySQL 的话,可以参考 MySQL IP 白名单使用通配符 将 B 类子网 192.168.0.0
全都加入白名单,这样一来就一劳永逸了。
docker 连接宿主机的 MySQL相关推荐
- docker与宿主机共享内存通信
docker与宿主机共享内存通信 docker中的进程要与宿主机使用共享内存通信,需要在启动容器的时候指定"–ipc=host"选项.然后再编写相应的共享内存的程序,一个跑在宿主机 ...
- 记录一次docker导致宿主机重启故障解决方法
记录一次docker导致宿主机重启故障解决方法 参考文章: (1)记录一次docker导致宿主机重启故障解决方法 (2)https://www.cnblogs.com/caidingyu/p/1215 ...
- docker导致宿主机重启和Cgroup 驱动程序有关
现象 某个宿主机突然登录不上了,重启后查看系统日志/var/log/messages和下面的日志类似 Jan 5 15:50:01 hanginx01 systemd: Started Session ...
- mac for docker访问宿主机服务
pod访问mac主机网络 Docker For Mac的Docker Daemon是运行于虚拟机(xhyve)中的, 而不是像Linux上那样作为进程运行于宿主机,因此Docker For Mac没有 ...
- docker连接容器外部的mysql
centos上面部署了docker容器 并且将原来的服务放到的docker的tomcat镜像上 但是现在服务服务连接mysql数据库 mysql.url=jdbc:mysql://localhost: ...
- docker 导致宿主机重启的解决方法
宿主机操作系统为centos 7.4 在k8s运行一段时间报错: containerd: time="2019-12-19T21:50:49.070815105Z" level=i ...
- docker使用宿主机代理
docker run -it --network=host --name="Host-Proxy-Test" ubuntu:16.04export ALL_PROXY='socks ...
- docker需要linux内核版本,docker与宿主机内核版本
1. 楼主的问题1我也产生过,虽然问法不一样,起初我也是想,如果就是运行在centos的服务器上,是否还需要FROM cetnos.但是既然所有书上一开始都说了要pull centos(ubuntu) ...
- 【docker】宿主机安装kafka docker容器内clickhouse无法连接
1. 概述 本地搭建了一套clickhouse连接kafka的环境,然后发现无法连接到kafka,环境如下 本机kafka 已启动docker ck 无法连接宿主机 9092 docker内部teln ...
最新文章
- PyCharm为什么这么牛?
- android easylink 搜索设备_手把手教你将数据从Android移动到iPhone步骤与技巧
- java抽象的理解_Java中抽象类的理解
- php 不能同时提交form
- 面试官问我会不会APP抓包,我..
- 第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【6】
- C++虚继承(八) --- 虚继承与继承的差异
- qwidget多个窗口同步_【好人BUG】本机多组控制 一台电脑使用一个帐号登录多个(省钱) !...
- 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...
- 论文学习1-DeepPath: A Reinforcement Learning Method for Knowledge Graph Reasoning
- android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题
- 每日站立会议 12.06
- 设置maven的阿里云代理
- 千锋中级Python视频百度云
- [六省联考2017]分手是祝愿
- linux中dpkg找不到命令_Linux中tree命令的使用
- Alexa工具条正确安装方法 Alexa工具条正确使用方法 Alexa工具条正确应用
- JavaScript网页游戏开发实战视频教程
- 【常用模块】电容触摸按键模块(原理讲解、STM32实例操作)
- UE4 相对坐标转世界坐标
热门文章
- KDZD400QH2S检测仪
- JavaSE-初级阶段项目-学生管理系统
- 我的专业我做主计算机演讲稿,我的管理我做主演讲稿
- 备案域名绑定服务器后 提示需要备案_最近有人问我:买了个域名,怎么用不了?域名究竟该怎么用?...
- 重点函数 | SELECTEDVALUE 用法介绍
- 各种好用的在线时钟、网页时钟汇总推荐集合
- 【转】【中级财管精华】递延年金现值公式的理解
- “error”:”get from image source failed: E405
- java 生成 zip格式 压缩文件
- php 忽略小数点,php使用floor去掉小数点的例子