当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker启动容器报错:Ports are not available的解决方案

Docker启动容器报错:Ports are not available的解决方案

2024年06月02日 云虚拟主机 我要评论
docker 将容器程序的端口号映射到宿主机的端口号,是一个 nat 过程,这个过程可能会因为与 windows nat 服务冲突而失效。所以启动 docker 时先关闭 nat 服务。一、问题描述试

docker 将容器程序的端口号映射到宿主机的端口号,是一个 nat 过程,这个过程可能会因为与 windows nat 服务冲突而失效。
所以启动 docker 时先关闭 nat 服务。

一、问题描述

试图启动一个 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的进程,但无结果。说明实际并无 tcp 进程占用该端口。

三、解决方案

net stop winnat
docker start container_name
net start winnat

四、拓展

1. winnat 是什么

net start winnat 是一个 windows 命令行命令,用于启动 windows 网络地址转换 (windows network address translation, winnat) 服务。winnat 是 windows 中的一个内置服务,它提供了网络地址转换 (nat) 功能。

nat 是一种网络技术,它允许一个 ip 地址空间中的设备在另一个 ip 地址空间中被看到。这通常用于在私有网络(例如家庭或办公室网络)和公共网络(例如互联网)之间进行通信。

当你运行 net start winnat 命令时,windows 会尝试启动 winnat 服务。如果服务已经在运行,它将显示一个消息,告诉你服务已经启动。如果服务没有运行,它将尝试启动服务,并显示一个消息,告诉你服务是否成功启动。

请注意,你可能需要管理员权限才能运行 net start winnat 命令。如果你没有管理员权限,你可能会收到一个错误消息。

2. 为何 winnat 会与 docker 容器冲突

nat(网络地址转换)服务和 docker 容器的启动可能会有冲突,主要是因为它们都可能需要使用到同一些网络端口。

docker 在启动容器时,会根据 dockerfile 或者 docker run 命令中的设置,将容器内的某些端口映射(绑定)到宿主机的端口,以便外部可以通过宿主机的端口访问到容器内的服务。这个过程实际上就是一个 nat 过程,因为它将容器内的 ip 地址和端口转换为了宿主机的 ip 地址和端口

然而,如果宿主机上已经有其他服务(例如 nat 服务)占用了这个端口,那么 docker 就无法成功绑定这个端口,从而导致容器启动失败。这就是为什么 nat 服务可能会影响 docker 容器启动的原因。

因此,如果你在启动 docker 容器时遇到了端口冲突的问题,你需要检查一下是不是有其他服务(如 nat 服务)已经占用了这个端口,如果是的话,你可能需要更改 docker 容器或者其他服务的端口设置,以避免冲突。

以上就是docker启动容器报错:ports are not available的解决方案的详细内容,更多关于docker报错ports are not available的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com