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)程,但無(wú)結(jié)果。說明實(shí)際并無(wú) 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 就無(wú)法成功綁定這個(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)文章
docker compose入門helloworld的詳細(xì)過程
docker-compose是基于docker的,所以我們需要先安裝docker才能使用docker-compose,接下來(lái)通過本文給大家介紹docker compose入門helloworld的過程,一起看看吧2021-09-09docker+daocloud實(shí)現(xiàn)前端項(xiàng)目自動(dòng)構(gòu)建部署
這篇文章主要介紹了docker+daocloud實(shí)現(xiàn)前端項(xiàng)目自動(dòng)構(gòu)建部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Docker 容器日志查看和清理的實(shí)現(xiàn)步驟
在處理Docker容器的過程中,經(jīng)常需要查看容器的日志輸出來(lái)排查問題或者進(jìn)行系統(tǒng)監(jiān)控,本文主要介紹了Docker容器日志查看和清理的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-11-11Docker部署RabbitMQ的實(shí)現(xiàn)方法(圖文并茂)
本文詳細(xì)介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動(dòng)日志,訪問控制臺(tái)和登錄等,全程詳細(xì)的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡(jiǎn)單易行2024-10-10Docker中Java基礎(chǔ)鏡像OpenJDK和OracleJDK使用方法
OpenJDK是Java社區(qū)的核心項(xiàng)目,由全球各地的開發(fā)者共同參與開發(fā)和維護(hù),OracleJDK在OpenJDK的基礎(chǔ)上添加了一些商業(yè)功能和工具,這篇文章主要給大家介紹了關(guān)于Docker中Java基礎(chǔ)鏡像OpenJDK和OracleJDK使用方法的相關(guān)資料,需要的朋友可以參考下2024-06-06win10中docker部署和運(yùn)行countly-server的流程
這篇文章主要記錄一下windows10中使用docker容器安裝和部署countly-server的整個(gè)流程,本文給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-11-11