TL;DR在执行docker run -it --rm -d -p 80:8080 --name web nginx
时只能通过端口8080访问容器,我想知道为什么。在执行docker run -it --rm -d -p 80:80 --name web nginx
时工作(能够通过端口80访问容器)。
大家好!
我在Raspberry Pi 4上运行Docker,我想用它来托管几个不同的服务。我想使用Nginx作为反向代理,以便更好地保护我的设备。
按照this设置Nginx容器的指南,我运行了docker run -it --rm -d -p 8080:80 --name web nginx
,只是想看看它是否按我预期的那样运行。这很有效(当我去:8080时,它显示了“欢迎来到nginx”页面)。
但是,我不想必须键入:8080;我想自动重定向HTTP请求,而不必输入端口号,所以我尝试了docker run -it --rm -d -p 80:8080 --name web nginx
。没有运气-出于某种原因,我只能得到欢迎页面,如果我指定:8080仍然。
我终于能够通过绑定端口80:80(例如:docker run -it --rm -d -p 80:8080 --name web nginx
),但我有点困惑,为什么它的工作,而不是80:8080.
根据我的理解,docker run -p 80:8080
应该将设备的端口80发布到容器的暴露端口8080,该端口应该将所有HTTP流量转发到该容器。为什么我仍然只能通过8080端口访问Nginx?我错过什么了吗?
1条答案
按热度按时间ni65a41a1#
nginx监听端口80。因此,
-p 8080:80
将主机端口8080转发到容器的端口80。-p 80:8080
则相反:将主机的端口80(http)转发到容器的端口8080。但是在你的容器中没有任何东西监听端口8080。如果你想将你的主机的http端口80转发到容器的端口80(nginx正在监听),使用
-p 80:80
。使用docker指定端口转发的语法是:
hostip:hostport:containerport
;hostip:
部分是可选的,因此hostport:containerport
也可以单独工作