当前位置: 首页 > 知识库问答 >
问题:

在Docker中转发端口时应该包含localhost吗?

仉磊
2023-03-14

每当我想在Docker容器中转发端口时,我使用一个简单的< code>-p 8080:8080命令。

现在,我在几个地方(这里和这里)读到,这可能是不安全的,我应该包括localhost环回,如下所示:-p127.0.0.1:8080: 8080

有人能解释一下吗?什么时候应该这样做,实际的安全影响是什么?

共有1个答案

柳刚豪
2023-03-14

当您在发布端口时没有指定IP地址时,发布的端口在所有接口上都可用。也就是说,如果您运行docker run-p 8080:8080…,那么您网络上的其他系统可以访问您机器上端口8080上的服务(如果您的机器具有可公开路由的地址,那么世界其他地方的系统也可以访问该服务)。(当然,您可能有主机或网络级别的防火墙规则,在任何情况下都可以阻止这种访问。)

当您在端口发布规范中指定ip地址时,如< code>127.0.0.1:8080:8080,则监听端口会显式绑定到该接口。

如果侦听端口仅绑定到环回接口127.0.0.1,那么只有本地计算机上的客户端才能连接——从网络上其他设备的角度来看,这些端口不可用。

哪种配置有意义取决于(a)您想要做什么(也许您想要公开一个除了您的本地机器之外的系统可以访问的服务),(b)您的本地网络看起来像什么,以及(c)您的风险规避水平。

 类似资料:
  • 我遇到的问题是,我无法在我希望看到的端口上看到应用程序。我正在公开端口8080并在8080上运行uwsgi进程,但在浏览器中找不到ip地址的应用程序。我只是得到谷歌Chrome的‘此网页不可用’。(我使用的是Mac,所以我需要获得boot2docker的ip地址)。容器显然正在运行,并报告我的uwsgi和celery进程也都成功运行。 运行时,得到的响应如下 ...因此容器似乎正在接受端口8080

  • 问题内容: 我在Mac OSX上使用Docker。 我有一个带有打开的守护程序的容器,正在侦听port 。 虚拟机设置为将所有计算机端口流量转发到此容器端口。 我想将我的本地主机设置为将所有流量转发到计算机端口。 我的机器在 我已经使用Apache虚拟主机配置和Proxy将本地端口8080上的所有HTTP通信转发到了计算机。 对ssh做相同的正确方法是什么? 我认为它涉及到此处提到的SSH隧道传输

  • 问题内容: 由于已弃用,因此我已切换到,但我不知道如何从中打开端口。在我可以这样做: 只要SSH连接打开,它将把端口27017从VirtualBox转发到本地主机27017。请注意,我不是在寻找一种在VirtualBox中永久打开端口的方法。我怎样才能做到这一点? 问题答案: 您仍然可以从docker机器使用的VirtualBox中访问VBoxmanage.exe命令: 使用让您的虚拟机的名称。

  • 问题内容: 我有这两个容器,例如(CentOs)和。我想拥有的是,可以从容器中连接到mongo数据库,就像它在本地运行一样, 无论如何,据我所知,您可以像这样将端口localhost:27017映射到mongo:27017 但是,如果执行此操作,则必须提供root密码,然后它会将我登录到容器中,并且不会发生端口转发 背景:我想这样做是因为我正在运行一个Java程序,该程序连接到localhost上

  • 我有一些关于界面使用的一般问题: 为每个对象类创建接口的优势是什么? 接口应该只包含'getter'方法吗? 为什么不是二传手? 为什么我应该为每个对象类创建一个接口?它会在JUnit测试中为我服务吗? 例如: 谢谢

  • 也许这是一个容易被删除的问题,但以防万一。 我最近在我的服务上执行注释方法时,怀疑这些方法是否应该包含在服务的接口上。 但是,另一方面,我的服务上有一个公共方法,但它不包括在接口上,出于某种原因,这对我来说很难闻(也许这只是一种习惯)。 那么,怎么办呢?这方面有什么惯例吗?