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.檢視現有的網路卡地址