Docker網(wǎng)絡(luò)模型—那些年踩過的坑
之前的一篇文章,我講過了Docker的基本使用,今天繼續(xù)講講Docker的四種網(wǎng)絡(luò),以及配置時,會遇到的坑,以及解決辦法。如果對Docker的基本概念與使用感興趣的可以看我另一篇文章?3分鐘讀懂docker使用
Docker網(wǎng)絡(luò)模型

Docker有這四大網(wǎng)絡(luò)模型,Docker的在不指定網(wǎng)絡(luò)模型的情況下,默認(rèn)是bridge模式。這就會容易出問題比如
場景1:安裝Kafka
1.安裝zookeeper

2.安裝kafka

問題:
在執(zhí)行上面kafka的容器創(chuàng)建語句時,你就會發(fā)現(xiàn)一直啟動失敗,然后出現(xiàn)下面提示語:Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 。
原因:
這個提示語,就是因為docker模式的網(wǎng)絡(luò)模式是橋接模式,不同的容器之間會有不同的ip,網(wǎng)上的很多教程都是直接寫的127.0.0.1,如果是在linux上直接配置是可行的,但是對于docker如果創(chuàng)建容器不專門指定網(wǎng)絡(luò)模式情況下,是行不通的。
解決辦法:
辦法1:docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}' 執(zhí)行該命令,就能得到zookeeper容器的ip地址,然后使用該ip地址進(jìn)行配置
辦法2:在docker run命令創(chuàng)建容器時,使用--net=host,這樣來指定其他的網(wǎng)絡(luò)模式,來解決這個問題。
場景2:docker中的nginx配置ssl證書
1.nginx.conf文件:

2.創(chuàng)建nginx容器

問題:
你會發(fā)現(xiàn),nginx啟動失敗,你的https請求,一直刷新不出頁面。
原因:
因為docker默認(rèn)是橋接模式,所以proxy_pass?http://127.0.0.1:8080/;?是跳轉(zhuǎn)不成功的,需要替換成linux的內(nèi)網(wǎng)地址。docker run命令沒有添加443端口,導(dǎo)致外部的443端口與容器的443端口沒有映射關(guān)系。使得ssl證書的解析會失敗。