介绍
本文将演示windows、mac、linux系统下,让docker容器连接宿主机的mysql。
通用命令
1.创建数据库zipkin,然后创建表:SQL文件
2.注意添加帐号权限,可以在任何ip上访问。
- all privileges包含查询、插入、修改等权限,也可:insert,delete
- *.*的第一个*代表所有的数据库,第二个*代表所有的表
- root是你登录的账号
- %代表所有的ip都可以访问数据库,也可以指定IP,如:127.0.0.1
- youpassword代表你访问数据库的密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
windows、mac
宿主机IP
不同于linux,windows和mac都是通过host.docker.internal去连接宿主机。
当你启动了一个web服务,在宿主机localhost:8080/hello的话,就可以通过下面的方式访问。连接mysql把localhost改成host.docker.internal即可。
$ docker run --rm -it alpine sh
$ apk add curl
$ curl http://host.docker.internal:8080/hello
$ exit
linux
获取到宿主机的ip
docker inspect <container-id-or-name> | grep Gateway
"Gateway": "",
"IPv6Gateway": "",
"Gateway": "172.18.0.1",
"IPv6Gateway": "",
对于docker应用程序内部,MySQL的指向宿主机的172.18.0.1:3306
注意MySQL监听
1.查找mysql文件
sudo find / -name my.cnf
2.修改my.cnf 配置
找到bind-address修改成0.0.0.0(有安全问题,仅测试使用)或172.18.0.1。