使用docker port命令映射容器的端口时系统报错Error∶NO public port ’80’publis hed for …?

参考回答

当你使用 docker port 命令映射容器端口时,出现 Error: NO public port '80' published for 错误,通常是因为容器并没有将端口正确暴露(-p 参数未使用或端口未绑定到宿主机)。要解决这个问题,需要确保容器启动时正确使用了 -p--publish 参数来将容器的端口映射到宿主机的端口。

解决方法:

  1. 检查容器端口映射
    • 使用 docker ps 查看容器的运行状态,检查容器的端口是否被映射到宿主机。
    docker ps
    
    Bash

    输出中会显示容器的端口映射信息,如:

    0.0.0.0:80->80/tcp
    
  2. 正确映射端口
    • 如果你没有正确使用 -p 选项在容器启动时暴露端口,执行容器时需要确保端口映射正确。假设你想将容器的80端口映射到宿主机的8080端口,可以使用以下命令:
    docker run -d -p 8080:80 nginx
    
    Bash

    这条命令将容器内的80端口映射到宿主机的8080端口。之后,你可以通过 docker port 命令查看端口映射。

  3. 重新启动容器并确保端口映射

    • 如果容器已经启动且没有正确映射端口,可以停止并删除容器,然后重新启动并正确映射端口:
    docker stop <container_id>
    docker rm <container_id>
    docker run -d -p 8080:80 nginx
    
    Bash
  4. 确认容器服务正常运行
    • 确保容器内的服务(如Nginx、Apache等)正确绑定到容器的端口。你可以进入容器内部,检查服务是否在监听端口:
    docker exec -it <container_id> /bin/bash
    netstat -tuln
    
    Bash

详细讲解与拓展

  1. docker port 命令作用
    • docker port 命令用于查看容器端口映射到宿主机的端口。如果容器没有正确的端口映射,就会出现 Error: NO public port '80' published for 错误。
    • 示例:
    docker port <container_id>
    
    Bash
  2. -p 参数的作用
    • docker run 命令中使用 -p--publish 参数,可以将容器的端口映射到宿主机的端口。
    • 格式为:
    -p <宿主机端口>:<容器端口>
    
    Bash
    • 例如,-p 8080:80 表示将宿主机的8080端口映射到容器的80端口。
  3. 容器端口暴露与服务绑定
    • 在容器启动时,通过 -p 参数暴露端口,但也需要确保容器内部的应用程序(如Nginx、Tomcat等)正确地监听该端口。如果应用程序没有绑定到正确的端口,即使容器的端口暴露了,外部仍无法访问。
  4. 检查防火墙和安全组设置
    • 如果容器端口映射正确,但外部依然无法访问,可能是宿主机的防火墙或安全组规则阻止了访问。需要确保相关端口在防火墙或安全组中已开放。

总结:当出现 Error: NO public port '80' published for 错误时,通常是因为容器没有正确暴露端口。通过在容器启动时使用 -p 参数映射端口,可以解决这个问题。要确保容器内的服务绑定到正确的端口,并且宿主机的防火墙或安全组允许访问该端口。

发表评论

后才能评论