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

 更新时间:2024年03月26日 08:48:49   作者:小岛世界的结局  
这篇文章主要介绍了Docker启动容器报错:Ports are not available的解决方案,Docker 将容器程序的端口号映射到宿主机的端口号,是一个 NAT 过程,这个过程可能会因为与 Windows 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的资料请关注脚本之家其它相关文章!

相关文章

  • docker容器资源配额控制详解

    docker容器资源配额控制详解

    本篇文章主要介绍了docker容器资源配额控制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • docker compose入门helloworld的详细过程

    docker compose入门helloworld的详细过程

    docker-compose是基于docker的,所以我们需要先安装docker才能使用docker-compose,接下来通过本文给大家介绍docker compose入门helloworld的过程,一起看看吧
    2021-09-09
  • docker如何修改容器默认存储路径

    docker如何修改容器默认存储路径

    这篇文章主要介绍了docker如何修改容器默认存储路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • docker+daocloud实现前端项目自动构建部署

    docker+daocloud实现前端项目自动构建部署

    这篇文章主要介绍了docker+daocloud实现前端项目自动构建部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Docker 容器日志查看和清理的实现步骤

    Docker 容器日志查看和清理的实现步骤

    在处理Docker容器的过程中,经常需要查看容器的日志输出来排查问题或者进行系统监控,本文主要介绍了Docker容器日志查看和清理的实现步骤,感兴趣的可以了解一下
    2023-11-11
  • Docker部署RabbitMQ的实现方法(图文并茂)

    Docker部署RabbitMQ的实现方法(图文并茂)

    本文详细介绍了如何使用Docker部署RabbitMQ的步骤,包括拉取RabbitMQ镜像,创建与授权文件夹,创建RabbitMQ容器,查看启动日志,访问控制台和登录等,全程详细的参数解释和操作步骤,让Docker部署RabbitMQ变得简单易行
    2024-10-10
  • Docker中Java基础镜像OpenJDK和OracleJDK使用方法

    Docker中Java基础镜像OpenJDK和OracleJDK使用方法

    OpenJDK是Java社区的核心项目,由全球各地的开发者共同参与开发和维护,OracleJDK在OpenJDK的基础上添加了一些商业功能和工具,这篇文章主要给大家介绍了关于Docker中Java基础镜像OpenJDK和OracleJDK使用方法的相关资料,需要的朋友可以参考下
    2024-06-06
  • 30分钟带你了解Docker(推荐)

    30分钟带你了解Docker(推荐)

    这篇文章是针对Java开发人员的,但Docker的使用场景绝不仅限于此。最后,灵敏意味着可能有一些开发方式需要调整,到底如何利用Docker应该是当你了解它之后需要认真思考的问题
    2018-08-08
  • win10中docker部署和运行countly-server的流程

    win10中docker部署和运行countly-server的流程

    这篇文章主要记录一下windows10中使用docker容器安装和部署countly-server的整个流程,本文给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • Docker部署Minio的实现方法

    Docker部署Minio的实现方法

    使用Docker搭建MinIO分布式对象存储系统可以让您快速搭建和配置一个高性能、可扩展的存储系统,本文主要介绍了Docker部署Minio的实现方法,感兴趣的可以了解一下
    2024-01-01

最新评论