Docker預設網段和主機網段衝突解決

骑着蚂蚁快跑發表於2024-07-23

1.背景

Docker 是一種廣泛使用的容器化平臺,它允許開發者在不同環境中輕鬆地部署和管理應用程式。預設情況下,Docker 會為容器分配一個預設的網段(通常是 172.17.0.0/16),以便容器之間可以相互通訊。然而,在某些情況下,Docker 的預設網段可能會與主機或其他網路的網段衝突,這會導致網路連線問題和其他網路相關的錯誤。

例如,如果主機網路或公司內部網路使用了與 Docker 預設網段相同的 IP 地址範圍,那麼在主機上執行的 Docker 容器可能無法正確訪問外部網路資源,或者可能會出現 IP 地址衝突的問題。這種情況在使用 VPN 連線到公司內部網路時尤其常見。

2.解決方案

例如:

為了解決 Docker 預設網段與主機網段衝突的問題,可以透過以下幾種方法來更改 Docker 的預設網段配置:

方法一:更改Docker的預設網段

1.編輯docker Daemon配置檔案

在主機上編輯Docker的配置檔案‘daemon.json’ ,該檔案通常位於 /etc/docker/daemon.json。加入以下程式碼:

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

其中上面的172.100.0.0/16是自定義的網段地址

2.刪除docker0

ip link delete docker0

3.重新啟動docker

# 停止docker執行
sudo systemctl stop docker
# 檢視docker 狀態
sudo systemctl status docker
# 啟動docker

sudo systemctl start docker

4.檢視docker現有的IP網段

方法二:配置Docker的自定義網路

如果用 docker-compose啟動,並且 docker-compose.yml有指定network,在啟動過程同樣會建立172.17.0.0類似的網路地址,可能還是會與主機衝突,這時候我們使用以下方法修改預設的網段

1. 檢視當前有docker建立的網路名稱

sudo docker network list

2.停止並刪除現有的docker容器

sudo docker stop $(docker ps -aq)
sudo docker rm $(docker ps -aq)

3.刪除上面的my_custom_network

sudo docker network remove  my_custom_network

4.為上面虛擬網路卡重新指定網段

sudo docker network create --driver=bridge --subnet  172.100.0.0/23 app-network

5.重新啟動docker

# 停止docker執行
sudo systemctl stop docker
# 檢視docker 狀態
sudo systemctl status docker
# 啟動docker
sudo systemctl start docker

6.檢視現有的網路卡地址

 

相關文章