目錄
問題描述:
問題分析:
问题解决
问题补充:
首頁 運維 Docker docker ping不通宿主機怎麼辦

docker ping不通宿主機怎麼辦

Jan 04, 2022 pm 04:58 PM
docker ping

docker ping不通宿主機的解決方法:1、修改daemon.json;2、關閉防火牆;3、修改sysctl.conf;4、重設網橋即可。

docker ping不通宿主機怎麼辦

本文操作環境:ubuntu16.04系統、Docker 20.10.11、Dell G3電腦。

docker ping不通宿主機怎麼辦?

Docker網橋模式ping不通宿主機

問題描述:

  Docker網路模式分為四種,一般我們不設定時預設為bridge單橋模式,容器使用獨立的network Namespace,並連接到docker0虛擬網路卡。透過docker0網橋以及Iptables nat表格配置與宿主機通訊。
  此時在堡壘機上進行測試,利用busybox進行測試:

# 拉取镜像
docker pull busybox
# 运行容器
docker run -itd --name busy_bridge busybox

  指令docker network inspect bridge檢視網路:
docker ping不通宿主機怎麼辦

  網路設定成功,進入容器內部,查看ip,可以看到已經指派ip,但是ping外部網路時失敗,無法連接外部網路:
docker ping不通宿主機怎麼辦

  但是在自己本地或阿里雲上進行相同的測試發現能夠連通網絡,這是什麼問題導致的呢?

問題分析:

  在網路上找了一個資料後很多都是重啟docker,然後就能連上了,一般是因為修改了某個配置然後重啟起作用,這裡並沒有什麼作用。一般修改的分為幾種,以下一一試驗:

  1. 修改#daemon.json

容器無法存取宿主機是因為網橋分配的網段和宿主機衝突了,需要修改daemon.json進行指定分配,使用指令vim /etc/docker/daemon.json進入後添加:

{"bip":"172.16.10.1/24"}

  雖然重啟docker並創建容器即可訪問,但是,原本堡壘機和容器分配的ip一點衝突也沒有,該方法不行。

  1. 關閉防火牆

  容器無法透過網橋存取宿主機,也無法存取外網,可能是防火牆阻止訪問,可以關閉防火牆或開啟某個連接埠。在伺服器上測試,開啟防火牆,發現容器確實無法存取百度首頁也確實無法存取宿主機,在關閉防火牆並重啟docker後,容器就能正常存取了。
  但是,堡壘機上的防火牆原本就是關閉的,該方法也沒用。

  1. 修改sysctl.conf

#  docker主機內部網路正常,與其它主機的連接失效,其它主機不能連接docker主機上映射的端口,docker內部也無法連接外部主機,利用docker info指令查看資訊發現報錯如下:

WARNING: IPv4 forwarding is disabled
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

  使用指令vim /etc/sysctl.conf編輯設定文件,在檔案中增加以下程式碼:

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1

  然後使用指令systemctl restart network重啟網絡,再看看docker info,警告消失。但是依舊沒有用,堡壘機上的容器還是無法透過網橋存取宿主機,無法存取外網。

  1. 重設網橋

  在使用指令yum install bridge-utils安裝工具後,利用 brctl show查看網橋,可以發現:
docker ping不通宿主機怎麼辦
  利用docker network create [網橋名]指令新橋發現其產生的bridge id還是8000.0000000000,在新網橋上建立容器,再次查看並沒有什麼變化,說明很可能是網橋的問題。
  再次​​測試,此時網橋ip172.17.0.1,容器ip172.0.0.2,發現宿主功能ping通網橋,但是無法連接容器,而容器無法連接網橋,無法連接宿主機,更別談外網了,所以這裡可以肯定是網橋出了問題。

问题解决

  这里docker network生成新的网桥不行,说明dockernetwork存在问题,我们利用刚才下载的bridge-utils来创建网桥。
  首先暂停docker服务,利用指令:

service docker stop

  添加网桥:

brctl addbr br0

  添加ip字段:

ip addr add 172.16.0.1/24 dev br0

  启用网桥br0

ip link set dev br0 up

  查看网络br0
docker ping不通宿主機怎麼辦

  修改docker默认网桥:

vim /etc/docker/daemon.json

  添加字段:

"bridge":"br0"

  重启docker

service docker start

  此时查看网桥:
docker ping不通宿主機怎麼辦

  在没有挂载容器前,依旧是8000.000000000000。运行测试容器:

docker run -itd --name busy_test busybox

  查看docker ping不通宿主機怎麼辦:
docker ping不通宿主機怎麼辦

  此时容器挂载在网桥上了,再次查看网桥id
docker ping不通宿主機怎麼辦

  说明已经其作用,进入测试容器内部,docker ping不通宿主機怎麼辦:
docker ping不通宿主機怎麼辦

  成功!
  补充:这里使用docker network新建网桥,没有用,发现新建网桥挂载容器后,其bridge id依旧不变,没有起作用,说明堡垒机上的docker network可能存在问题。

问题补充:

  上面的问题是创建自定义网桥,然后在自定义网桥上连接容器ab,结果宿主机无法pingab,且进入容器内部后,两个容器无法ping通自定义网络,但能彼此相通。
  查了很多资料,发现了这篇文章。博主说问题原因是系统内核的网桥模块bridge.ko加载失败导致,解决问题的方案是升级内核或升级系统。
  升级centos内核参考这篇。
  升级完成后,重装Docker,自定义网桥和容器,成功!不再有网络问题。

推荐学习:《docker视频教程

以上是docker ping不通宿主機怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

如何在PHP環境中設置環境變量 PHP運行環境變量添加說明 如何在PHP環境中設置環境變量 PHP運行環境變量添加說明 Jul 25, 2025 pm 08:33 PM

PHP設置環境變量主要有三種方式:1.通過php.ini全局配置;2.通過Web服務器(如Apache的SetEnv或Nginx的fastcgi_param)傳遞;3.在PHP腳本中使用putenv()函數。其中,php.ini適用於全局且不常變的配置,Web服務器配置適用於需要隔離的場景,putenv()適用於臨時性的變量。持久化策略包括配置文件(如php.ini或Web服務器配置)、.env文件配合dotenv庫加載、CI/CD流程中動態注入變量。安全管理敏感信息應避免硬編碼,推薦使用.en

為PHP創建準備生產的Docker環境 為PHP創建準備生產的Docker環境 Jul 27, 2025 am 04:32 AM

使用正確的PHP基礎鏡像並配置安全、性能優化的Docker環境是實現生產就緒的關鍵。 1.選用php:8.3-fpm-alpine作為基礎鏡像以減少攻擊面並提升性能;2.通過自定義php.ini禁用危險函數、關閉錯誤顯示並啟用Opcache及JIT以增強安全與性能;3.使用Nginx作為反向代理,限制訪問敏感文件並正確轉發PHP請求至PHP-FPM;4.採用多階段構建優化鏡像,移除開發依賴,設置非root用戶運行容器;5.可選Supervisord管理多個進程如cron;6.部署前驗證無敏感信息洩

如何讓PHP容器支持自動構建 PHP環境持續集成CI配置方式 如何讓PHP容器支持自動構建 PHP環境持續集成CI配置方式 Jul 25, 2025 pm 08:54 PM

要讓PHP容器支持自動構建,核心在於配置持續集成(CI)流程。 1.使用Dockerfile定義PHP環境,包括基礎鏡像、擴展安裝、依賴管理和權限設置;2.配置GitLabCI等CI/CD工具,通過.gitlab-ci.yml文件定義build、test和deploy階段,實現自動構建、測試和部署;3.集成PHPUnit等測試框架,確保代碼變更後自動運行測試;4.使用Kubernetes等自動化部署策略,通過deployment.yaml文件定義部署配置;5.優化Dockerfile,採用多階段構

如何搭建獨立PHP任務容器環境 PHP定時腳本運行容器配置方法 如何搭建獨立PHP任務容器環境 PHP定時腳本運行容器配置方法 Jul 25, 2025 pm 07:27 PM

搭建獨立PHP任務容器環境可通過Docker實現,具體步驟如下:1.安裝Docker與DockerCompose作為基礎;2.創建獨立目錄存放Dockerfile、crontab文件;3.編寫Dockerfile定義PHPCLI環境並安裝cron及必要擴展;4.編寫crontab文件定義定時任務;5.編寫docker-compose.yml掛載腳本目錄並配置環境變量;6.啟動容器並驗證日誌。相比Web容器內執行定時任務,獨立容器具備資源隔離、環境純粹、穩定性強、便於擴展等優勢。為確保日誌與錯誤捕

如何在CentOS上安裝Docker 如何在CentOS上安裝Docker Sep 23, 2025 am 02:02 AM

卸載舊版本Docker避免衝突,2.安裝yum-utils並添加官方Docker倉庫,3.安裝DockerCE、CLI和containerd,4.啟動並啟用Docker服務,5.運行hello-world鏡像驗證安裝成功,6.可選配置非root用戶運行Docker。

Docker的Windows如何工作? Docker的Windows如何工作? Aug 29, 2025 am 09:34 AM

dockerforwindowsissalinuxvmorwsl2torunco​​​​ntainersbeceafewindowslacksnativelinuxkernelfeatures; 1)itautomomatomatimatormatomatemantomationalmanagesmanagesmanagesmanagesManageSalightWeightlinuxVM(oruesswsl2)含有higherper-vtotoHostThostTheDoockerDaemockerDaemoSttheDaemondaemondaemondaemondaementtherdcontaigners; 2)

如何開始使用Docker 如何開始使用Docker Aug 16, 2025 pm 01:46 PM

dockerisaplatformformforpackaging,運輸,andrunningapplicationsInlight inlight,隔離的thathathathatheThareTheHostoSkernel,與弗比弗利特馬果不同。 2.installdockerdockerdockerdockerdockerdockerdockerdockerdockerdoponWindowsormacos

如何刪除懸空的碼頭圖像? 如何刪除懸空的碼頭圖像? Aug 02, 2025 am 11:37 AM

dandlingimagesAryuntaggedLayerSnotAssociedwithanyContainerAndCanbereMeviduseDocker'sbuilt-Incommands.1.usedockerimagePrunetoSagePrunEtoSafelyRemevelyRemeverRemeverRemageImagesafterConfterConfterConfirnation,Oradd-ftofoforceremoverempoverprompt.2.usedockerempt.2.usedockerimagepremagepremageprearemageprearealsoremeremeremeremovealluse

See all articles