Docker啟動容器報錯:Ports are not available的解決方案
Docker 將容器程序的端口號映射到宿主機的端口號,是一個 NAT 過程,這個過程可能會因為與 Windows NAT 服務(wù)沖突而失效。
所以啟動 Docker 時先關(guān)閉 NAT 服務(wù)。
一、問題描述
試圖啟動一個 nacos
容器時,Docker
報錯:
(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.
二、問題分析
通常這意味著宿主機的端口號被占用了。Windows
打開終端界面:
netstat -ano | findstr "8848"
尋找占用了 :8848
的進程,但無結(jié)果。說明實際并無 TCP 進程占用該端口。
三、解決方案
net stop winnat docker start container_name net start winnat
四、拓展
1. winnat 是什么
net start winnat
是一個 Windows 命令行命令,用于啟動 Windows 網(wǎng)絡(luò)地址轉(zhuǎn)換 (Windows Network Address Translation, WinNAT) 服務(wù)。WinNAT 是 Windows 中的一個內(nèi)置服務(wù),它提供了網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT) 功能。
NAT 是一種網(wǎng)絡(luò)技術(shù),它允許一個 IP 地址空間中的設(shè)備在另一個 IP 地址空間中被看到。這通常用于在私有網(wǎng)絡(luò)(例如家庭或辦公室網(wǎng)絡(luò))和公共網(wǎng)絡(luò)(例如互聯(lián)網(wǎng))之間進行通信。
當你運行 net start winnat
命令時,Windows 會嘗試啟動 WinNAT 服務(wù)。如果服務(wù)已經(jīng)在運行,它將顯示一個消息,告訴你服務(wù)已經(jīng)啟動。如果服務(wù)沒有運行,它將嘗試啟動服務(wù),并顯示一個消息,告訴你服務(wù)是否成功啟動。
請注意,你可能需要管理員權(quán)限才能運行 net start winnat
命令。如果你沒有管理員權(quán)限,你可能會收到一個錯誤消息。
2. 為何 winnat 會與 Docker 容器沖突
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)服務(wù)和 Docker 容器的啟動可能會有沖突,主要是因為它們都可能需要使用到同一些網(wǎng)絡(luò)端口。
Docker 在啟動容器時,會根據(jù) Dockerfile 或者 docker run 命令中的設(shè)置,將容器內(nèi)的某些端口映射(綁定)到宿主機的端口,以便外部可以通過宿主機的端口訪問到容器內(nèi)的服務(wù)。這個過程實際上就是一個 NAT 過程,因為它將容器內(nèi)的 IP 地址和端口轉(zhuǎn)換為了宿主機的 IP 地址和端口。
然而,如果宿主機上已經(jīng)有其他服務(wù)(例如 NAT 服務(wù))占用了這個端口,那么 Docker 就無法成功綁定這個端口,從而導(dǎo)致容器啟動失敗。這就是為什么 NAT 服務(wù)可能會影響 Docker 容器啟動的原因。
因此,如果你在啟動 Docker 容器時遇到了端口沖突的問題,你需要檢查一下是不是有其他服務(wù)(如 NAT 服務(wù))已經(jīng)占用了這個端口,如果是的話,你可能需要更改 Docker 容器或者其他服務(wù)的端口設(shè)置,以避免沖突。
以上就是Docker啟動容器報錯:Ports are not available的解決方案的詳細內(nèi)容,更多關(guān)于Docker報錯Ports are not available的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker compose入門helloworld的詳細過程
docker-compose是基于docker的,所以我們需要先安裝docker才能使用docker-compose,接下來通過本文給大家介紹docker compose入門helloworld的過程,一起看看吧2021-09-09docker+daocloud實現(xiàn)前端項目自動構(gòu)建部署
這篇文章主要介紹了docker+daocloud實現(xiàn)前端項目自動構(gòu)建部署,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Docker部署RabbitMQ的實現(xiàn)方法(圖文并茂)
本文詳細介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動日志,訪問控制臺和登錄等,全程詳細的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡單易行2024-10-10Docker中Java基礎(chǔ)鏡像OpenJDK和OracleJDK使用方法
OpenJDK是Java社區(qū)的核心項目,由全球各地的開發(fā)者共同參與開發(fā)和維護,OracleJDK在OpenJDK的基礎(chǔ)上添加了一些商業(yè)功能和工具,這篇文章主要給大家介紹了關(guān)于Docker中Java基礎(chǔ)鏡像OpenJDK和OracleJDK使用方法的相關(guān)資料,需要的朋友可以參考下2024-06-06win10中docker部署和運行countly-server的流程
這篇文章主要記錄一下windows10中使用docker容器安裝和部署countly-server的整個流程,本文給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2019-11-11