使用docker port命令映射容器的端口时系统报错Error∶NO public port ’80’publis hed for …?
参考回答
当你使用 docker port
命令映射容器端口时,出现 Error: NO public port '80' published for
错误,通常是因为容器并没有将端口正确暴露(-p
参数未使用或端口未绑定到宿主机)。要解决这个问题,需要确保容器启动时正确使用了 -p
或 --publish
参数来将容器的端口映射到宿主机的端口。
解决方法:
- 检查容器端口映射:
- 使用
docker ps
查看容器的运行状态,检查容器的端口是否被映射到宿主机。
输出中会显示容器的端口映射信息,如:
0.0.0.0:80->80/tcp
- 使用
- 正确映射端口:
- 如果你没有正确使用
-p
选项在容器启动时暴露端口,执行容器时需要确保端口映射正确。假设你想将容器的80端口映射到宿主机的8080端口,可以使用以下命令:
这条命令将容器内的80端口映射到宿主机的8080端口。之后,你可以通过
docker port
命令查看端口映射。 - 如果你没有正确使用
-
重新启动容器并确保端口映射:
- 如果容器已经启动且没有正确映射端口,可以停止并删除容器,然后重新启动并正确映射端口:
- 确认容器服务正常运行:
- 确保容器内的服务(如Nginx、Apache等)正确绑定到容器的端口。你可以进入容器内部,检查服务是否在监听端口:
详细讲解与拓展
docker port
命令作用:docker port
命令用于查看容器端口映射到宿主机的端口。如果容器没有正确的端口映射,就会出现Error: NO public port '80' published for
错误。- 示例:
-p
参数的作用:- 在
docker run
命令中使用-p
或--publish
参数,可以将容器的端口映射到宿主机的端口。 - 格式为:
- 例如,
-p 8080:80
表示将宿主机的8080端口映射到容器的80端口。
- 在
- 容器端口暴露与服务绑定:
- 在容器启动时,通过
-p
参数暴露端口,但也需要确保容器内部的应用程序(如Nginx、Tomcat等)正确地监听该端口。如果应用程序没有绑定到正确的端口,即使容器的端口暴露了,外部仍无法访问。
- 在容器启动时,通过
- 检查防火墙和安全组设置:
- 如果容器端口映射正确,但外部依然无法访问,可能是宿主机的防火墙或安全组规则阻止了访问。需要确保相关端口在防火墙或安全组中已开放。
总结:当出现 Error: NO public port '80' published for
错误时,通常是因为容器没有正确暴露端口。通过在容器启动时使用 -p
参数映射端口,可以解决这个问题。要确保容器内的服务绑定到正确的端口,并且宿主机的防火墙或安全组允许访问该端口。