成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Docker 網(wǎng)絡(luò) IP 地址沖突了,我該怎么辦呢?

系統(tǒng) Linux
這個(gè)問(wèn)題其實(shí)稍微有一點(diǎn)點(diǎn)麻煩,網(wǎng)上也沒(méi)有看到有比較全面正確的文章, 值得單獨(dú)寫(xiě)一篇記錄一下。

 

這個(gè)問(wèn)題其實(shí)稍微有一點(diǎn)點(diǎn)麻煩,網(wǎng)上也沒(méi)有看到有比較全面正確的文章, 值得單獨(dú)寫(xiě)一篇記錄一下。

1前置知識(shí)

因?yàn)榻粨Q機(jī)的能力有限制,以及網(wǎng)線(xiàn)的連接不可能無(wú)限長(zhǎng), 所以我們不可能把所有的主機(jī)都連到同一個(gè)交換機(jī)上,然后處于同一個(gè)二層網(wǎng)絡(luò)中。

就算能,主機(jī)間的 ARP 廣播也會(huì)讓這個(gè)網(wǎng)絡(luò)瞬間癱瘓。

所以我們得把主機(jī)拆分到一個(gè)個(gè)的小的子網(wǎng)里,然后通過(guò)路由器再并成三層網(wǎng)絡(luò)。

我們俗稱(chēng)的 IP 地址其實(shí)由兩個(gè)部分組成,網(wǎng)絡(luò)地址和主機(jī)地址。比如 10.0.0.1/8 中,第一個(gè) 10 是網(wǎng)絡(luò)地址,后面的 0.0.1 是主機(jī)地址。那我怎么知道怎么去拆分這兩段呢?靠的就是子網(wǎng)掩碼,也就是那個(gè) /8。

IP 其實(shí)是由 32 位的二進(jìn)制組成的,x.x.x.x 只是為了方便人類(lèi)閱讀將其轉(zhuǎn)成了十進(jìn)制。有個(gè)簡(jiǎn)單粗暴的辦法就是可以認(rèn)為每一段都是 8 位,所以 /8 就代表第一段是網(wǎng)絡(luò)地址。

同理,/16 就代表前兩段都是網(wǎng)絡(luò)地址,10.0.0.0/16 中, 網(wǎng)絡(luò)地址是 10.0,后兩位 0.0 代表每個(gè)子網(wǎng)中的主機(jī)地址。

比如 10.0.0.1/16 和 10.0.0.2/16 是同一個(gè)子網(wǎng)的兩個(gè)主機(jī)。10.0.0.1/16 和 10.1.0.1/16 是不同的子網(wǎng)的兩個(gè)主機(jī)。

這里只是簡(jiǎn)單粗暴的介紹下,更多的信息還是自己去查資料了解學(xué)習(xí)。

2問(wèn)題表現(xiàn)

  •  docker 進(jìn)程無(wú)法啟動(dòng)
  •  容器端口無(wú)法訪(fǎng)問(wèn),抓包顯示為有入站但是沒(méi)有出站

3排查

此處針對(duì)的是 dockerd 無(wú)法啟動(dòng)的情況,如果 dockerd 能啟動(dòng),可以直接跳到解決一節(jié)

首先是看下日志 

  1. $ systemctl status docker  
  2. $ journalctl -u docker  
  3. $ dmesg | grep docker 

一般能看到如下日志: 

  1. docker0: link is not ready  
  2. docker_gwbridge: link is not ready 

或者更簡(jiǎn)單的排查方法,直接手動(dòng)啟動(dòng) dockerd 看看。啟動(dòng)方法可以通過(guò) grep ExecStart /usr/lib/systemd/system/docker.service 查看。

一般來(lái)說(shuō)按如下執(zhí)行就行:

  1. $ /usr/bin/dockerd --debug 

然后能看到最后輸出: 

  1. INFO[2021-07-29T02:25:55.811673622Z] stopping event stream following graceful shutdown  error="<nil>" module=libcontainerd namespace=moby 
  2. failed to start daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks List: [10.252.0.0/24 10.252.1.0/24 10.252.2.0/24]: no available network 

 這時(shí)候可以看下 ip addr,是否有 docker0 和 docker_gwbridge,

如果發(fā)現(xiàn)沒(méi)有 docker0,那基本可以肯定是 docker0 無(wú)法創(chuàng)建導(dǎo)致 dockerd 啟動(dòng)失敗了。

4解決

找到占用的網(wǎng)段

默認(rèn)的 docker0 網(wǎng)段是 172.17.0.0/16,docker_gwbridge 網(wǎng)段是 172.18.0.0/24,你需要確認(rèn)下這兩個(gè)網(wǎng)段是否被占用了。

最簡(jiǎn)單的方法就是 ping 一下,如果無(wú)響應(yīng)的話(huà),那么就說(shuō)明沒(méi)有被占用。

其次就是看一下本機(jī)的路由表 route -n,確認(rèn)一下有沒(méi)有沖突的段。一般來(lái)說(shuō),你會(huì)發(fā)現(xiàn)相關(guān)網(wǎng)段要么已經(jīng)被占用,要么是路由表里存在沖突。

案例

比如在我的環(huán)境里,我給 docker0 配置為 10.252.0/24,然后 dockerd 起不來(lái)。

排查后發(fā)現(xiàn) route -n 里有這么一條: 

  1. 10.0.0.0        172.21.0.1      255.0.0.0       UG    0      0        0 eth0 

也就是說(shuō) 10/8 被占用了,導(dǎo)致和我的 10.252.0/24 沖突。后來(lái)聯(lián)系網(wǎng)管刪除了這條 10/8 的路由后解決。

修改 docker 占用的網(wǎng)段

以下操作需要先停止 docker 進(jìn)程

  1. $ systemctl stop docker 

如果你用 docker service,那么 docker 會(huì)占用四個(gè)網(wǎng)段:

  1.  docker0
  2.  docker_gwbridge
  3.  ucp(docker engine 占用,不常見(jiàn))
  4.  ingress

其中前三個(gè)的網(wǎng)段可以通過(guò)配置文件配置,第四個(gè)只能手動(dòng)創(chuàng)建。

前三個(gè)網(wǎng)段會(huì)讀取 /etc/docker/daemon.json 這個(gè)配置文件, 這個(gè)文件默認(rèn)是沒(méi)有的,需要手動(dòng)創(chuàng)建。 

  1.  
  2.     "bip": "",  
  3.     "default-address-pools": [  
  4.         {"base": "10.252.0.0/24", "size": 24},  
  5.         {"base": "10.252.1.0/24", "size": 24},  
  6.         {"base": "10.252.2.0/24", "size": 24}  
  7.     ]  

注意這個(gè) default-address-pools 至少要有兩項(xiàng),按順序依次為:

  1.  docker0
  2.  docker_gwbridge
  3.  ucp

以防萬(wàn)一的話(huà),配置三個(gè)是最好的😄。

接下來(lái)是修改 ingress,這個(gè)比較麻煩,需要手動(dòng)創(chuàng)建。

我的辦法是在初始化 docker swarm 以后,啟動(dòng) docker stack/service 以前,執(zhí)行以下腳本:

  1.  刪除 ingress
  2.  刪除 my-ingress(不一定存在,不存在就忽略)
  3.  新建 my-ingress 
  1. $ yes 'y' | docker network rm ingress  
  2. $ yes 'y' | docker network rm my-ingress 2>&1 | true  
  3. $ docker network create \  
  4.   --driver overlay \  
  5.   --ingress \  
  6.   --subnet=10.252.3.0/24 \  # 指定 ingress 的網(wǎng)段,不要和上面 daemon.json 的網(wǎng)段沖突  
  7.   --gateway=10.252.3.2 \  
  8.   --opt com.docker.network.driver.mtu=1200 \  
  9.   my-ingress 

ingress 是默認(rèn)名,之所以新建一個(gè)名字不一樣的,是因?yàn)閯h除 ingress 是異步的。如果你刪除 ingress 后立刻新建一個(gè)也叫 ingress 的網(wǎng)絡(luò),很可能會(huì)報(bào)一個(gè)重名的錯(cuò)誤。

重啟 docker 前,最好先清理一下 docker 的緩存: 

  1. $ ip link del dev docker0  
  2. $ ip link del dev docker_gwbridge  
  3. $ rm -rf /var/lib/docker/network 

另一種粗糙簡(jiǎn)單的解決辦法

另一種粗糙簡(jiǎn)單的解決辦法就是干脆直接手動(dòng)創(chuàng)建一個(gè) docker0。

這種解決方法最簡(jiǎn)單,但是機(jī)器 reboot 后 docker0 會(huì)自動(dòng)被刪掉, 所以這方法并不持久。

而且,實(shí)際上也不一定能解決網(wǎng)段沖突的問(wèn)題,只是說(shuō) docker 能啟動(dòng)了而已。 

  1. ip link add name docker0 type bridge  
  2. ip addr add dev docker0 10.252.0.1/24  

 

責(zé)任編輯:龐桂玉 來(lái)源: 奇妙的Linux世界
相關(guān)推薦

2021-12-07 11:46:33

KubernetesEvicted PodLinux

2018-08-20 19:39:14

區(qū)塊鏈職業(yè)崗位

2022-10-14 08:18:07

Guavaweb應(yīng)用

2022-02-06 00:16:53

加密貨幣比特幣以太坊

2020-09-29 12:15:13

生死鎖MySQL

2020-07-21 10:05:48

技術(shù)研發(fā)指標(biāo)

2019-06-03 10:53:49

MySQL硬盤(pán)數(shù)據(jù)庫(kù)

2024-10-09 17:06:52

RedisHash哈希表

2022-09-05 09:02:01

服務(wù)器CPU服務(wù)

2024-10-18 09:55:50

RedisHash數(shù)據(jù)

2021-10-27 18:52:17

Gitflow工具命名

2010-08-18 10:07:37

NATPAT

2009-11-03 08:56:02

linux死機(jī)操作系統(tǒng)

2022-12-19 11:31:57

緩存失效數(shù)據(jù)庫(kù)

2022-07-05 11:48:47

MySQL死鎖表鎖

2015-07-10 09:08:52

IP地址IP地址沖突

2022-04-22 10:30:07

框架JavaScript前端

2011-06-30 17:58:30

網(wǎng)站被K

2022-07-05 14:19:30

Spring接口CGLIB

2011-11-16 10:02:48

DNSDNS記錄DNS記錄消失
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线日韩中文字幕 | 久一久 | аⅴ资源新版在线天堂 | 欧美日韩一区二区视频在线观看 | 亚洲 成人 在线 | 日本免费一区二区三区视频 | 91网站视频在线观看 | 中文字幕一区二区三区四区五区 | 亚洲视频中文字幕 | 亚洲av毛片 | 搞av.com| 一区二区三区中文字幕 | 欧美激情网站 | 久久国产精彩视频 | 一区二区精品 | 日韩一级精品视频在线观看 | 成人夜晚看av | 精品国产一级 | 欧美日韩综合一区 | 久草视频观看 | 激情五月婷婷在线 | 在线视频国产一区 | 91视频www.| 国产精品日韩一区二区 | 中文字幕免费在线观看 | 亚洲一区二区电影在线观看 | 亚洲精品久久久久中文字幕欢迎你 | 亚洲午夜在线 | 91直接看| 国产一区二区三区四区五区3d | 国产精品久久久久久久久久妇女 | 国产精品视频区 | 欧美中文字幕一区 | 中文字幕视频免费 | 国产精品一区在线播放 | 一区二区久久 | 国产在线精品一区二区 | 999久久久精品 | 成人av一区二区亚洲精 | 一区二区三区国产精品 | 成人精品一区二区三区 |