修改docker預設網關
文章背景:
我們在區域網路中使用Docker,最常遇到的一個困惑,就是有時候跨網段結果出現網路不通。原因是因為Docker預設產生的網關和我們的區域網路區域有時候是衝突的,例如在172.16網段的機器上部署Docker,結果產生的docker0網橋是172.17網段,那麼就和真實環境中使用該網段的機器衝突了(即ping不通172.17網段的機器)。
(推薦教學:docker教學)
為了避免衝突,首先想到的是改網關,舉例如下(以Centos為例):
service docker stop # 删除docker防火墙过滤规则 iptables -t nat -F POSTROUTING # 删除docker默认网关配置 ip link set dev docker0 down ip addr del 172.17.0.1/16 dev docker0 # 增加新的docker网关配置 ip addr add 192.168.2.1/24 dev docker0 ip link set dev docker0 up # 检测是否配置成功,如果输出信息中有 192.168.5.1,则表明成功 ip addr show docker0 service docker start # 验证docker防火墙过滤规则
這麼改完,是否就可靠了?答案是否定的,因為docker重啟後,可能還是會重建docker0,涵蓋我們所做的修改。說明Docker的IP規則就是寫死的,不讓我們隨便更改。但我們就換個思路,直接幹掉docker0,重建一個新的網橋:
首先需要安裝網橋建立工具brctl:
sudo yum install -y bridge-utils
開始建立操作:
# 1.停止 Docker 服务 service docker stop # 2.创建新的网桥(新的网段) brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up # 3.确认网桥信息 ip addr show bridge0 # 4.修改配置文件 /etc/docker/daemon.json(如不存在则创建一个 touch daemon.json),使Docker启动时使用自定义网桥 { "bridge": "bridge0" } # 5.重启 Docker service docker start # 确认 NAT 网络路由 iptables -t nat -L -n # 6.删除不再使用的网桥 ip link set dev docker0 down brctl delbr docker0 iptables -t nat -F POSTROUTING
關於步驟4所做的修改配置,就是引用新的網橋,其實還可以在docker設定檔中引用新的網橋:
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker sudo service docker start
但不代表我們一定能看到docker自訂配置文件,如果沒有default/docker或sysconfig/docker,比較麻煩,解決方法如下:
$ vi /lib/systemd/system/docker.service #添加一行 $ EnvironmentFile=-/etc/default/docker 或者 $ EnvironmentFile=-/etc/sysconfig/docker #-代表ignore error #并修改 $ ExecStart=/usr/bin/docker daemon -H fd:// #改成 $ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS #这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数 $ systemctl daemon-reload 重载 $ sudo service docker restart
完成了bridge0的創建和從docker0過度到bridge0,那麼我們就可以route一下,以確認是否有我們不想看到的172.17網段:
只要沒有,那麼我們就不但心和172.17網段的機器連通了。如果還有,那麼再用 ip addr del 172.17.0.1/16 dev docker0,直到清除完畢(因為已經建立新的docker網橋,所以刪除舊的不會影響docker使用)。
如果重新啟動機器後brctl所創建的網橋可能遺失,那麼我們可以將以下指令寫到linux自啟動腳本中,每次重啟的時候執行一遍:
brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up
自啟動腳本可以透過在/etc/rc.local檔案中加入可執行語句(如sh /opt/script.sh &)。這樣基本上每次重啟機器後,也能保證bridge0被創建,確保docker服務正常啟動。
另外:如果只是為了解決IP網段衝突,又不願意操作以上複雜的過程,其實也可以只改/etc/docker/daemon.json,透過加入內容"bip": "ip/ netmask",來實現docker0網橋的網段變更,如下:
[root@iZ2ze278r1bks3c1m6jdznZ ~]# cat /etc/docker/daemon.json { "bip":"192.168.2.1/24" }
以上是修改docker預設網關的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

重啟 Docker 容器的方法:獲取容器 ID(docker ps);停止容器(docker stop <container_id>);啟動容器(docker start <container_id>);驗證重啟成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(參考 Docker 文檔)。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]
