Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案
Docker 將容器程序的端口號(hào)映射到宿主機(jī)的端口號(hào),是一個(gè) NAT 過程,這個(gè)過程可能會(huì)因?yàn)榕c Windows NAT 服務(wù)沖突而失效。
所以啟動(dòng) Docker 時(shí)先關(guān)閉 NAT 服務(wù)。
一、問題描述
試圖啟動(dòng)一個(gè) nacos 容器時(shí),Docker 報(bào)錯(cuò):
(HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:8848 -> 0.0.0.0:0: listen tcp 0.0.0.0:8848: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
二、問題分析
通常這意味著宿主機(jī)的端口號(hào)被占用了。Windows 打開終端界面:
netstat -ano | findstr "8848"
尋找占用了 :8848的進(jìn)程,但無結(jié)果。說明實(shí)際并無 TCP 進(jìn)程占用該端口。
三、解決方案
net stop winnat docker start container_name net start winnat
四、拓展
1. winnat 是什么
net start winnat 是一個(gè) Windows 命令行命令,用于啟動(dòng) Windows 網(wǎng)絡(luò)地址轉(zhuǎn)換 (Windows Network Address Translation, WinNAT) 服務(wù)。WinNAT 是 Windows 中的一個(gè)內(nèi)置服務(wù),它提供了網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT) 功能。
NAT 是一種網(wǎng)絡(luò)技術(shù),它允許一個(gè) IP 地址空間中的設(shè)備在另一個(gè) IP 地址空間中被看到。這通常用于在私有網(wǎng)絡(luò)(例如家庭或辦公室網(wǎng)絡(luò))和公共網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))之間進(jìn)行通信。
當(dāng)你運(yùn)行 net start winnat 命令時(shí),Windows 會(huì)嘗試啟動(dòng) WinNAT 服務(wù)。如果服務(wù)已經(jīng)在運(yùn)行,它將顯示一個(gè)消息,告訴你服務(wù)已經(jīng)啟動(dòng)。如果服務(wù)沒有運(yùn)行,它將嘗試啟動(dòng)服務(wù),并顯示一個(gè)消息,告訴你服務(wù)是否成功啟動(dòng)。
請(qǐng)注意,你可能需要管理員權(quán)限才能運(yùn)行 net start winnat 命令。如果你沒有管理員權(quán)限,你可能會(huì)收到一個(gè)錯(cuò)誤消息。
2. 為何 winnat 會(huì)與 Docker 容器沖突
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)服務(wù)和 Docker 容器的啟動(dòng)可能會(huì)有沖突,主要是因?yàn)樗鼈兌伎赡苄枰褂玫酵恍┚W(wǎng)絡(luò)端口。
Docker 在啟動(dòng)容器時(shí),會(huì)根據(jù) Dockerfile 或者 docker run 命令中的設(shè)置,將容器內(nèi)的某些端口映射(綁定)到宿主機(jī)的端口,以便外部可以通過宿主機(jī)的端口訪問到容器內(nèi)的服務(wù)。這個(gè)過程實(shí)際上就是一個(gè) NAT 過程,因?yàn)樗鼘⑷萜鲀?nèi)的 IP 地址和端口轉(zhuǎn)換為了宿主機(jī)的 IP 地址和端口。
然而,如果宿主機(jī)上已經(jīng)有其他服務(wù)(例如 NAT 服務(wù))占用了這個(gè)端口,那么 Docker 就無法成功綁定這個(gè)端口,從而導(dǎo)致容器啟動(dòng)失敗。這就是為什么 NAT 服務(wù)可能會(huì)影響 Docker 容器啟動(dòng)的原因。
因此,如果你在啟動(dòng) Docker 容器時(shí)遇到了端口沖突的問題,你需要檢查一下是不是有其他服務(wù)(如 NAT 服務(wù))已經(jīng)占用了這個(gè)端口,如果是的話,你可能需要更改 Docker 容器或者其他服務(wù)的端口設(shè)置,以避免沖突。
以上就是Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Docker報(bào)錯(cuò)Ports are not available的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式
這篇文章主要介紹了物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
CentOS?7中安裝Docker和Docker?Compose的完整操作步驟
這篇文章主要介紹了在CentOS?7系統(tǒng)上安裝Docker和Docker?Compose的步驟,包括環(huán)境準(zhǔn)備、卸載舊版本、安裝Docker、配置鏡像加速以及安裝和驗(yàn)證Docker?Compose,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
Centos7安裝docker、docker-compose實(shí)踐過程
這篇文章主要介紹了Centos7安裝docker、docker-compose實(shí)踐過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
Docker 數(shù)據(jù)卷權(quán)限實(shí)例詳解
這篇文章主要介紹了Docker 數(shù)據(jù)卷權(quán)限實(shí)例詳解的相關(guān)資料,在運(yùn)行Docker 容器的時(shí)候需要添加權(quán)限,這里就給大家舉例說明如何實(shí)現(xiàn),需要的朋友可以參考下2016-11-11
不重啟Docker容器就能修改時(shí)間的全方案總結(jié)
在使用Docker的過程中,很多開發(fā)者會(huì)遇到需要修改容器時(shí)間的場(chǎng)景,本文會(huì)梳理Docker容器時(shí)間的底層邏輯,以及不重啟容器修改時(shí)間的所有可行方案,大家可以根據(jù)需要進(jìn)行選擇2025-12-12

