Docker - 为什么发布 80:80 有效但 80:8080 无效?

问题描述 投票:0回答:1

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:80 --name web nginx
)让它工作,但我有点困惑为什么它有效而不是 80:8080。

根据我的理解,

docker run -p 80:8080
应该将设备的端口 80 发布到容器的公开端口 8080,容器应该将所有 HTTP 流量转发到该容器。为什么我还是只能通过8080端口访问Nginx?我错过了什么吗?

docker nginx nginx-reverse-proxy
1个回答
1
投票

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
也可以单独使用

© www.soinside.com 2019 - 2024. All rights reserved.