簡體   English   中英

Docker 創建了兩個破壞我的互聯網訪問的橋梁

[英]Docker create two bridges that corrupts my internet access

我面臨一個非常奇怪的問題:

這是我的配置:

  • 碼頭工人 17-ce
  • Ubuntu 16.04。

我在不同的互聯網提供商的兩個不同地方工作。

首先,一切正常,我可以開箱即用地運行 docker 並毫無問題地訪問互聯網。

另一方面當 docker運行時,我無法訪問互聯網,更准確地說當 docker 創建的兩個虛擬橋啟動時

在這個地方,互聯網連接運行非常奇怪,我可以在 8.8.8.8 ping google dns,但幾乎所有 dns 請求都失敗了,而且大部分時間互聯網連接都在幾秒鍾后完全斷開。

(第一和第二之間的唯一區別是互聯網提供商)。

起初我認為我可以通過更改默認網橋 ip 來解決這個問題,但這根本不能解決問題。

關鍵是docker守護進程的--bip選項更改了默認docker網橋docker0的 IP,但docker還創建了另一個名為br-1a0208f108d9 的網橋,它不反映傳遞給--bip選項的設置。

我猜這第二個網橋給我的網絡造成了麻煩,因為它與我的 wifi 適配器配置重疊。

我很難對此進行診斷。

我的問題是:

  • 我如何確定我的假設是正確的,並且第二個橋接器與我的 wifi 適配器沖突
  • 這第二座橋是什么? 很容易找到有關docker0網橋的文檔,但我找不到與第二個網橋br-1a0208f108d9相關的任何內容
  • 完全相同的設置如何在一個地方而不是另一個地方工作。

有了這個麻煩,我覺得我已經很接近提升我的 docker 知識了,但在此之前我必須增加我的網絡管理知識。

希望你能幫忙。

閱讀本文后,我設法解決了這個問題:

https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks

第二個 docker網橋br-1a0208f108d9是由docker創建的,因為我使用的是 docker-compose 文件,該文件涉及創建其他自定義網絡。

此網絡使用固定的 ip 范圍

networks:
  my_network:
    driver: bridge
    ipam:
      config:
      - subnet: 172.16.0.0/16
        gateway: 172.16.0.1
  • 在我家,物理 wifi 網絡適配器使用 DHCP 自動分配地址 192.168.0.X。
  • 但在另一個地方,同一個wifi適配器得到地址172.16.0.x

這與自定義 docker 網絡發生沖突。

解決方案只是更改自定義 docker 網絡的 IP。

您必須告訴 Docker 使用不同的子網。 編輯/etc/docker/daemon.json並使用如下內容:

{
  "bip": "198.18.251.1/24",
  "default-address-pools": [
    {
      "base": "198.18.252.0/22",
      "size": 26
    }
  ]
}

信息有點難獲取,但看起來bip選項控制分配給docker0接口的 IP 和子網,而default-address-pools控制用於br-*接口的地址。 您可以省略bip在這種情況下,它將從池中獲取分配,並且bip不必駐留在池中,如上所示。

size是分配給每個 Docker 網絡的子網的size 例如,如果您的base/24並且您還將size設置為24 ,那么您將能夠創建一個 Docker 網絡,並且您可能只能運行一個 Docker 容器。 如果您嘗試啟動另一個,您將收到消息could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network in the could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network ,這意味着您已經用完了池中的 IP 地址。

在上面的示例中,我分配了一個/22 (1024 個地址),每個網絡/容器從該池中獲取一個/26 (64 個地址)。 1024 ÷ 64 = 16,因此您可以使用此配置運行多達 16 個 Docker 網絡(因此最多可同時運行 16 個容器,如果其中一些共享同一網絡,則最多可運行更多)。 因為我很少同時有兩個或三個以上的運行容器,所以這對我來說很好。

在我的示例中,我使用了RFC 3330 中列出的198.18.0.0/15子網的一部分(但完整記錄在RFC 2544 中),該子網保留用於性能測試。 這些地址不太可能出現在真實的 Internet 上,也沒有專業的網絡提供商會在他們的私有網絡中使用這些子網,因此在我看來,它們是與 Docker 一起使用的不錯選擇,因為沖突的可能性很小。 但從技術上講,這是對該 IP 范圍的濫用,因此如果您還選擇使用這些子網,請注意未來可能發生的沖突。

文檔列出的默認值是:

{
  "bip": "",
  "default-address-pools": [
    {"base": "172.80.0.0/16", "size": 24},
    {"base": "172.90.0.0/16", "size": 24}
  ]
}

如上所述,默認的空bip意味着它只會從池中獲取分配,就像任何其他網絡/容器一樣。

在我的情況下,我不會應用 Clement 解決方案,因為我的網絡沖突僅與我的開發電腦發生沖突,而容器被交付給許多不受影響的服務器。 我認為這個問題應該按照這里的建議解決。 我試過這個解決方法:

  1. 我用“docker-compose down”停止了容器,這會破壞橋

  2. 當我在“壞”網絡上時啟動了容器,所以容器使用另一個網絡

從那以后,如果我在任何網絡上重新啟動容器,它就不會嘗試使用“壞”的容器,通常會獲取最后使用的容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM