本文分成两个部分,第一个部分是一个关于docker网络的相关知识和命令, 第二部分是踩的一些坑
docker网络
docekr0
docker0是Docker中的默认网络接口。当启动Docker时,它会在主机上创建一个名为docker0的虚拟网络接口。docker0主要用于容器和宿主机之间的通信以及容器与外部网络的连接。
docker0是一个桥接网络接口,它在Docker安装和启动时自动生成。
容器互联 --link (了解)
我们通过容器的名字是无法ping通的,例如【docker exec -it tomcat02 ping tomcat01】是没有办法ping通的,
当然我们可以使用--link可以解决网络连通问题 使用docker run -d -P --name tomcat03 --link tomcat02 tomcat运行tomcat03并且连通tomcat02是可以的,并且通过docker exec -it tomcat03 ping tomcat02可以ping通。
但是反向就不能ping通了【docker exec -it tomcat02 ping tomcat03】就会ping失败。
网络模式
命令
--driver bridge # 桥接模式
--subnet 192.168.0.0/16 # 配制一个子网,65535个字段 192.168.0.2——192.168.255.255
--gateway 192.168.0.1 # 配制默认的路由网关
mynet #表示自定义的网络名
更多docker推荐这一片详细的文章【真的是一片文章就学的清清楚楚的】,不是笔者写的,里面包含部署Redis集群(可以尝试下)。
https://blog.csdn.net/weixin_43246215/article/details/108934216
踩的一部分坑
docker连接mysql SQLSTATE[HY000] [2002] Connection refused, No route to host怎么办
使用docker生成mysql容器,
在连接时,
如果你把host写成 localhost $host='localhost';
会报错:SQLSTATE[HY000] [2002] No such file or directory
如果把 host 写成 IP 地址,
$host='127.0.0.1';
会报错 SQLSTATE[HY000] [2002] Connection refused
解决:
应该写成mysql容器的名称,
例如 $host='lnmp_mysql';
这里有个前提, 需要你的mysql容器和php容器在同一个docker网络,
或者使用 --link lnmp_mysql指定。
感谢前辈们提供的解决办法
原文:https://www.cnblogs.com/maowenqiang/p/16010447.html
推荐阅读
欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。
