内部暴露 Docker 端口

内部暴露 Docker 端口

我想运行一个 Docker 容器,该容器仅在所述主机上的 Docker 实例内部公开其端口。这意味着我不希望它公开。

如何从命令行执行此操作?下面的代码将其公开打开。

docker run -p 27017:27017 --name mongo mongo

答案1

如果你执行:

docker run -p 27017:27017 --name mongo mongo

然后docker将其解释为:

docker run -p 0.0.0.0:27017:27017 --name mongo mongo

这意味着该端口可从主机访问,也可从外部访问。

您可以通过从另一台机器运行nmap -p 27017 <host IP>您的主机来验证这一点。端口 27017 应显示为“打开”。

如果你执行:

docker run -p 127.0.0.1:27017:27017 --name mongo mongo

那么该端口只能从主机访问。

您可以通过从另一台机器运行nmap -p 27017 <host IP>您的主机来验证这一点。端口 27017 应显示为“已关闭”。

最后,如果你执行:

docker run --name mongo mongo

那么所有端口对于容器来说都将是本地的。

再次,您可以通过nmap在主机上运行容器来验证这一点:nmap -p 27017 <container IP>。端口 27017 应显示为“已关闭”。

答案2

--exposeDocker 命令的 -tag应该run能提供你想要的内容。从文档


发布或公开端口(-p,--expose)

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

这会将容器的端口 8080 绑定到主机 127.0.0.1 上的 TCP 端口 80。您还可以指定 udp 和 sctp 端口。Docker 用户指南详细说明了如何在 Docker 中操作端口。

$ docker run --expose 80 ubuntu bash

这会公开容器的 80 端口,而无需将该端口发布到主机系统的接口。


当您为容器公开端口时,它只能在容器的网络内访问(bridge默认情况下)。这对于在网络中运行多个容器并让它们进行通信非常有用,而无需向外部发布它们的端口(例如出于安全原因)。

答案3

如果你跑

docker run --name mongo mongo

其他容器将能够访问 mongo,但前提是它们知道 mongo 容器的 ip,而不允许主机外部访问

以下内容还将阻止主机外的机器访问 mongo

docker run -p 127.0.0.1:27017:27017 --name mongo mongo

如果其他容器知道 IP,它们仍然可以访问它

相关内容