之前的一篇文章,我讲过了Docker的基本使用,今天继续讲讲Docker的四种网络,以及配置时,会遇到的坑,以及解决办法。如果对Docker的基本概念与使用感兴趣的可以看我另一篇文章 3分钟读懂docker使用

Docker网络模型

Docker有这四大网络模型,Docker的在不指定网络模型的情况下,默认是bridge模式。这就会容易出问题比如

场景1:安装Kafka

1.安装zookeeper


(资料图片)

2.安装kafka

问题:

在执行上面kafka的容器创建语句时,你就会发现一直启动失败,然后出现下面提示语:Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 。

原因:

这个提示语,就是因为docker模式的网络模式是桥接模式,不同的容器之间会有不同的ip,网上的很多教程都是直接写的127.0.0.1,如果是在linux上直接配置是可行的,但是对于docker如果创建容器不专门指定网络模式情况下,是行不通的。

解决办法:

办法1:docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}' 执行该命令,就能得到zookeeper容器的ip地址,然后使用该ip地址进行配置

办法2:在docker run命令创建容器时,使用--net=host,这样来指定其他的网络模式,来解决这个问题。

场景2:docker中的nginx配置ssl证书

1.nginx.conf文件:

2.创建nginx容器

问题:

你会发现,nginx启动失败,你的https请求,一直刷新不出页面。

原因:

因为docker默认是桥接模式,所以proxy_pass http://127.0.0.1:8080/; 是跳转不成功的,需要替换成linux的内网地址。docker run命令没有添加443端口,导致外部的443端口与容器的443端口没有映射关系。使得ssl证书的解析会失败。

关键词: